如何在地图中存储/访问同一个键的多个值C ++

时间:2016-03-19 03:06:30

标签: c++ vector unordered-map

所以我要说一个像这样的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等?

2 个答案:

答案 0 :(得分:6)

std::unordered_map只为每个密钥存储一个值 - 您分配给它的最后一个值,在您的情况下为vec3。如果您想为每个密钥存储多个值,可以使用std::multimapstd::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;可以是用户定义的..

为您的案例使用此类型的版本更加灵活。而不是有序或无序的地图..