所以我要说一个像这样的unordered_map:
unordered_map<string, vector<string>> my_map;
我有一个我想要存储在其中的值列表:
vector<string> vec1 = {"banana", "apple"};
vector<string> vec2 = {"banana", "banana"};
vector<string> vec3 = {"banana", "watermelon"};
如果我经历并将每个向量初始化为映射,则使用其第0个索引中的字符串作为键,如下所示:
my_map[vec1[0]] = vec1;
my_map[vec2[0]] = vec2;
my_map[vec3[0]] = vec3;
unordered_map是否会存储所有三个向量,尽管它们具有相同的访问密钥?如果我想访问每个向量,有没有一种方法可以按照上面列表中出现的顺序执行此操作?
例如,如果我这样做:
vector<string> output1;
vector<string> output2;
vector<string> output3;
output1 = my_map["banana"];
output2 = my_map["banana"];
output3 = my_map["banana"];
哪些向量将分配给output1,output2和output3?我很确定它对所有人都是相同的向量,但是unordered_map如何决定哪一个?我怎样才能将vec1分配给output1,vec2分配给output2等?
答案 0 :(得分:6)
std::unordered_map
只为每个密钥存储一个值 - 您分配给它的最后一个值,在您的情况下为vec3
。如果您想为每个密钥存储多个值,可以使用std::multimap
或std::unordered_multimap
。
答案 1 :(得分:1)
如果2个元素具有相同的键,则将打印第一个键值,其他键将被忽略。
所以试试地图:
示例代码段
std::multimap <int, xxx> stdBindListOuter;
std::multimap <int, std::string>::iterator pos;
std::multimap <int, xxx>::iterator posOuter;
XXX - &GT;可以是用户定义的..
为您的案例使用此类型的版本更加灵活。而不是有序或无序的地图..