c ++ STL映射一键二值

时间:2014-07-02 13:17:09

标签: c++

我的情况是我有一个带有一个键和两个值的地图。

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

取决于我需要更新一个值或另一个值的条件。

我正在寻找插入/找到密钥并更新此地图中的值的语法

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

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

并查找和更新

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

3 个答案:

答案 0 :(得分:1)

std::map需要两个模板参数,一个键和一个值类型。但是你可以使用任意类型来表示“价值”。

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);

答案 1 :(得分:1)

在项目中插入项:

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

中的示例

答案 2 :(得分:0)

我喜欢bkausbk的答案,并且会对此答案发表评论,但没有代表。 Map有时会需要默认的构造函数。我从another SO post知道这一点。我可以通过设置默认参数来使其工作(该帖子还有其他解决方案)

因此我将bkausbk的答案中的构造函数更改为:

TestValue(int v1 = 0, int v2 = 0, int v3 = 0) : Value1(v1), Value2(v2), Value3(v3) {}