C++ STL无序映射-插入到向量中

C++ STL无序映射-插入到向量中,c++,vector,stl,insert,unordered-map,C++,Vector,Stl,Insert,Unordered Map,我不太熟悉STL的无序映射,我在插入元素时遇到了麻烦 我有一个无序映射,其中键是字符串,映射值是整数向量。我宣布: unordered_map<string, vector<int> > categorySearch; 这显然给了我编译器错误。如何对地图的矢量部分使用insert 以下是我得到的编译器错误: logData.h: In member function ‘void LogData::addEntry(Log)’: logData

我不太熟悉STL的无序映射,我在插入元素时遇到了麻烦

我有一个无序映射,其中键是字符串,映射值是整数向量。我宣布:

              unordered_map<string, vector<int> > categorySearch;
这显然给了我编译器错误。如何对地图的矢量部分使用insert

以下是我得到的编译器错误:

logData.h: In member function ‘void LogData::addEntry(Log)’:
logData.h:23:68: error: no match for ‘operator[]’ (operand types are ‘std::unordered_map<std::basic_string<char>, std::vector<int> >’ and ‘<unresolved overloaded function type>’)
categorySearch.insert(make_pair(add.getCategory(), categorySearch[add.getCategory].push_back(data.size()-1)));
                                                                ^
logData.h:23:68: note: candidates are:
In file included from /usr/um/gcc-4.8.2/include/c++/4.8.2/unordered_map:48:0,
             from logData.h:2,
             from logman.cpp:5:
/usr/um/gcc-4.8.2/include/c++/4.8.2/bits/unordered_map.h:595:7: note: std::unordered_map<_Key, _Tp, _Hash, _Pred, _Alloc>::mapped_type& std::unordered_map<_Key, _Tp, _Hash, _Pred, _Alloc>::operator[](const key_type&) [with _Key = std::basic_string<char>; _Tp = std::vector<int>; _Hash = std::hash<std::basic_string<char> >; _Pred = std::equal_to<std::basic_string<char> >; _Alloc = std::allocator<std::pair<const std::basic_string<char>, std::vector<int> > >; std::unordered_map<_Key, _Tp, _Hash, _Pred, _Alloc>::mapped_type = std::vector<int>; std::unordered_map<_Key, _Tp, _Hash, _Pred, _Alloc>::key_type = std::basic_string<char>]
   operator[](const key_type& __k)
   ^
/usr/um/gcc-4.8.2/include/c++/4.8.2/bits/unordered_map.h:595:7: note:   no known conversion for argument 1 from ‘<unresolved overloaded function type>’ to ‘const key_type& {aka const std::basic_string<char>&}’
/usr/um/gcc-4.8.2/include/c++/4.8.2/bits/unordered_map.h:599:7: note: std::unordered_map<_Key, _Tp, _Hash, _Pred, _Alloc>::mapped_type& std::unordered_map<_Key, _Tp, _Hash, _Pred, _Alloc>::operator[](std::unordered_map<_Key, _Tp, _Hash, _Pred, _Alloc>::key_type&&) [with _Key = std::basic_string<char>; _Tp = std::vector<int>; _Hash = std::hash<std::basic_string<char> >; _Pred = std::equal_to<std::basic_string<char> >; _Alloc = std::allocator<std::pair<const std::basic_string<char>, std::vector<int> > >; std::unordered_map<_Key, _Tp, _Hash, _Pred, _Alloc>::mapped_type = std::vector<int>; std::unordered_map<_Key, _Tp, _Hash, _Pred, _Alloc>::key_type = std::basic_string<char>]
   operator[](key_type&& __k)
   ^
/usr/um/gcc-4.8.2/include/c++/4.8.2/bits/unordered_map.h:599:7: note:   no known conversion for argument 1 from ‘<unresolved overloaded function type>’ to ‘std::unordered_map<std::basic_string<char>, std::vector<int> >::key_type&& {aka std::basic_string<char>&&}’
make: *** [logman.o] Error 1
logData.h:在成员函数“void logData::addEntry(Log)”中:
logData.h:23:68:错误:与“运算符[]”不匹配(操作数类型为“std::无序映射”和“”)
insert(创建_对(add.getCategory(),categorySearch[add.getCategory].push_-back(data.size()-1));
^
logData.h:23:68:注:候选人为:
在/usr/um/gcc-4.8.2/include/c++/4.8.2/unordered_map:48:0中包含的文件中,
从logData.h:2,
来自logman.cpp:5:
/usr/um/gcc-4.8.2/include/c++/4.8.2/bits/unordered_-map.h:595:7:注:std::unordered_-map::mapped_-type&std::unordered_-map::operator[](const key_-type&)[带(Key=std::basic_string;_Tp=std::vector;_Hash=std::Hash;_Pred=std::equal_to;_Alloc=std::分配器;std::无序_map::mapped_type=std::vector;std::无序_map::Key_type=std::basic_string]
运算符[](常量键类型和)
^
/usr/um/gcc-4.8.2/include/c++/4.8.2/bits/unordered_map.h:595:7:注意:参数1从“”到“const key_type&{aka const std::basic_string&}的转换未知
/usr/um/gcc-4.8.2/include/c++/4.8.2/bits/unordered_-map.h:599:7:note:std::unordered_-map::mapped_-type&std::unordered_-map::operator[](std::unordered_-map::key_-type&)[带(Key=std::basic_string;_Tp=std::vector;_Hash=std::Hash;_Pred=std::equal_to;_Alloc=std::分配器;std::无序_map::mapped_type=std::vector;std::无序_map::Key_type=std::basic_string]
运算符[](键类型和键k)
^
/usr/um/gcc-4.8.2/include/c++/4.8.2/bits/unordered_-map.h:599:7:注意:参数1从“”到“std::unordered_-map::key_-type&&{aka std::basic_-string&}的转换未知
制造:**[logman.o]错误1

谢谢。

这对中的
第二个
是一个
向量
,因此您可以用1个元素构造一个向量,并用5初始化,而不是
推回

 categorySearch.insert(make_pair("hello", std::vector<int>(1,5)));
实例:

您将看到“hello”的映射条目现在在向量中有2个条目,因为第二次调用
insert
失败,因为该条目以前存在


请参见此处:

这对中的
第二个
是一个
向量
,因此您可以用1个元素构造一个向量,该元素初始化为5,而不是
向后推

 categorySearch.insert(make_pair("hello", std::vector<int>(1,5)));
实例:

您将看到“hello”的映射条目现在在向量中有2个条目,因为第二次调用
insert
失败,因为该条目以前存在


请参见此处:

这对中的
第二个
是一个
向量
,因此您可以用1个元素构造一个向量,该元素初始化为5,而不是
向后推

 categorySearch.insert(make_pair("hello", std::vector<int>(1,5)));
实例:

您将看到“hello”的映射条目现在在向量中有2个条目,因为第二次调用
insert
失败,因为该条目以前存在


请参见此处:

这对中的
第二个
是一个
向量
,因此您可以用1个元素构造一个向量,该元素初始化为5,而不是
向后推

 categorySearch.insert(make_pair("hello", std::vector<int>(1,5)));
实例:

您将看到“hello”的映射条目现在在向量中有2个条目,因为第二次调用
insert
失败,因为该条目以前存在


请参见此处:

我想我会采取两种方法之一。第一种可能是使用地图的
操作符[]
,因此代码看起来像:

category_search["hello"].push_back(5);
另一个明显的可能性是认识到您正在创建的内容(每个键都有多个映射值)等同于
无序的\u multimap
提供的内容,因此您可以使用:

std::unordered_multimap<std::string, int> category_search;

category_search.emplace("hello", 5);
…或:

category_search.emplace("hello", 10);
…分别连接到
无序映射
/
无序映射
,也将值
10
与键
hello
关联

对于
无序的\u多重映射
,您可以使用
相等的\u范围
检索与特定键关联的值集,如:

auto p = category_search.equal_range("hello");

这将把范围的开始置于
p.first
中,结束于
p.second
我想我会采取两种方法之一。第一种可能是使用地图的
操作符[]
,因此代码如下所示:

category_search["hello"].push_back(5);
另一个明显的可能性是认识到您正在创建的内容(每个键都有多个映射值)等同于
无序的\u multimap
提供的内容,因此您可以使用:

std::unordered_multimap<std::string, int> category_search;

category_search.emplace("hello", 5);
…或:

category_search.emplace("hello", 10);
…分别连接到
无序映射
/
无序映射
,也将值
10
与键
hello
关联

对于
无序的\u多重映射
,您可以使用
相等的\u范围
检索与特定键关联的值集,如:

auto p = category_search.equal_range("hello");

这将把范围的开始置于
p.first
中,结束于
p.second
我想我会采取两种方法之一。第一种可能是使用地图的
操作符[]
,因此代码如下所示:

category_search["hello"].push_back(5);
另一个明显的可能性是认识到您正在创建的内容(每个键都有多个映射值)等同于
无序的\u multimap
提供的内容,因此您可以使用:

std::unordered_multimap<std::string, int> category_search;

category_search.emplace("hello", 5);
…或:

category_search.emplace("hello", 10);
…分别连接到
无序映射
/
无序映射
,也将值
10
与键
hello
关联

对于
无序的\u multimap
,您可以使用检索与特定键相关联的值集