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

use*_*356 2 c++ unordered-map vector

所以我可以说我声明了一个像这样的unordered_map:

unordered_map<string, vector<string>> my_map;
Run Code Online (Sandbox Code Playgroud)

我有一个我想要存储在其中的值列表,如下所示:

vector<string> vec1 = {"banana", "apple"}; 
vector<string> vec2 = {"banana", "banana"};
vector<string> vec3 = {"banana", "watermelon"};
Run Code Online (Sandbox Code Playgroud)

如果我通过并将每个向量初始化到地图,使用其第0个索引中的字符串作为键,如下所示:

my_map[vec1[0]] = vec1;
my_map[vec2[0]] = vec2;
my_map[vec3[0]] = vec3;
Run Code Online (Sandbox Code Playgroud)

unordered_map是否会存储所有三个向量,尽管它们具有相同的访问密钥?如果我想访问每个向量,有没有一种方法可以按照上面列表中出现的顺序执行此操作?

例如,如果我这样做:

 vector<string> output1;
 vector<string> output2;
 vector<string> output3;

 output1 = my_map["banana"];
 output2 = my_map["banana"];
 output3 = my_map["banana"];
Run Code Online (Sandbox Code Playgroud)

哪些向量将分配给output1,output2和output3?我很确定它会为所有人提供相同的矢量但是unordered_map如何决定哪一个?我怎样才能使vec1被分配给output1,vec2到output2等?

Ant*_*vin 6

std::unordered_map每个键只存储一个值 - 您分配给它的最后一个值,在您的情况下它是vec3.如果要为每个可以使用的键存储多个值,std::multimap或者std::unordered_multimap.