映射一个键两个值

c++ STL Map one key two values

本文关键字:两个 一个 映射      更新时间:2023-10-16

我有一个情况,我有一个映射与一个键和两个值,例如

std::map<std::string, std::pair<double, double> > myMultiValueMap

根据条件,我需要更新一个值或另一个值。

我正在寻找语法来插入/查找键并更新此映射中的值

是的,我以前在地图上使用过插入,但不确定多值地图

std::map<std::string,double> myMap;
myMap.insert(std::make_pair("12345",0.00));

查找和更新too

std::map<std::string,double>::iterator it =  myMap.find(("12345");

std::map需要两个模板参数,一个键和一个值类型。但是,您可以为"value"使用任意类型。

struct TestValue {
    int Value1;
    int Value2;
    int Value3;
    TestValue(int v1, int v2, int v3) : Value1(v1), Value2(v2), Value3(v3) {}
};
std::map<std::string, TestValue> myMap;
myMap["test"] = TestValue(1, 2, 3);

在映射中插入项:

myMultiValueMap[strKey] = make_pair(firstDouble, secondDouble);

检查是否存在项:

if( myMultiValueMap.find(strKey) != myMultiValueMap.end() ) {
    // Item Exists
}

更新项:

myMultiValueMap[strKey].first = newFirstDouble;
myMultiValueMap[strKey].second = newSecondDouble;

你应该使用

using namespace std;

请花时间阅读cplusplus.com上的示例

我喜欢bkausbk的答案,并且会对答案进行注释,但没有rep. Map有时会出现需要默认构造函数的问题。我从另一个SO帖子中知道这一点。我通过设置默认参数(该帖子有其他解决方案)让它工作

因此,我将bkausbk的答案中的构造函数更改为:
TestValue(int v1 = 0, int v2 = 0, int v3 = 0) : Value1(v1), Value2(v2), Value3(v3) {}
相关文章: