如何 store/access 映射 C++ 中同一键的多个值
How to store/access multiple values of the same key in a map C++
所以假设我这样声明 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,等等?
std::unordered_map
为每个键仅存储一个值 - 您最后分配给它的值,在您的例子中是 vec3
。如果你想为每个键存储多个值,你可以使用 std::multimap
or std::unordered_multimap
.
如果 2 个元素具有相同的键,则将打印第一个键值,其他键值将被忽略。
所以试试地图的地图:
示例代码段:
std::multimap <int, xxx> stdBindListOuter;
std::multimap <int, std::string>::iterator pos;
std::multimap <int, xxx>::iterator posOuter;
xxx-->可以自定义..
因此可以更灵活地为您的案例使用这种类型的版本。而不是有序或无序的地图..
所以假设我这样声明 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,等等?
std::unordered_map
为每个键仅存储一个值 - 您最后分配给它的值,在您的例子中是 vec3
。如果你想为每个键存储多个值,你可以使用 std::multimap
or std::unordered_multimap
.
如果 2 个元素具有相同的键,则将打印第一个键值,其他键值将被忽略。
所以试试地图的地图:
示例代码段:
std::multimap <int, xxx> stdBindListOuter;
std::multimap <int, std::string>::iterator pos;
std::multimap <int, xxx>::iterator posOuter;
xxx-->可以自定义..
因此可以更灵活地为您的案例使用这种类型的版本。而不是有序或无序的地图..