将对的向量放入unordered_map与地图中

问题描述 投票:0回答:1

因此,请考虑以下代码:

#include <bits/stdc++.h>
using namespace std;

int main()
{
    unordered_map<vector<pair<int,int>>,int> mp ;
    for(int i=0;i<10;i++)
    {
        vector<pair<int,int>> v ;
        for(int j=0;j<10;j++)
            v.push_back(make_pair(j,2*j)) ;
        mp[v] = i ;

    }
    return 0;
}

我在这里正在用unordered_map类型的键创建一个vector<pair<int,int>>。如您所见here,这将引发一个错误。

但是当我将此unordered_map更改为map时,this error doesn't occur anymore。那是:

#include <bits/stdc++.h>
using namespace std;

int main()
{
    map<vector<pair<int,int>>,int> mp ;
    for(int i=0;i<10;i++)
    {
        vector<pair<int,int>> v ;
        for(int j=0;j<10;j++)
            v.push_back(make_pair(j,2*j)) ;
        mp[v] = i ;

    }
    return 0;
}

效果很好。

那么unordered_map是什么,然后将vector作为键放在其中?这是怎么回事?

c++ hashmap unordered-map
1个回答
0
投票

详细说明一下:对于std::map

std :: map是一个排序的关联容器,其中包含具有唯一键的键/值对。键通过使用比较函数Compare进行排序。 [...]地图通常以红黑树的形式实现。

Said “ function Compare”是具有默认值std::less<Key>的模板参数。因此,地图需要使用<比较值以将其分类为红黑树。 std::vector支持(这样的比较)[https://en.cppreference.com/w/cpp/container/vector/operator_cmp]

std::unoredered_map在另一个哈希上,需要使用哈希函数将密钥放入哈希存储桶中。使用的哈希函数是一个模板参数,默认值为std::hash<Key>

std::hash仅对vector<bool>具有重载,而对于任何通用向量均没有。除非您提供自定义哈希函数,否则unordered_map无法计算键的哈希,这也就是错误消息告诉您的内容。

© www.soinside.com 2019 - 2024. All rights reserved.