Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/127.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ STL映射一个键两个值_C++ - Fatal编程技术网

C++ STL映射一个键两个值

C++ STL映射一个键两个值,c++,C++,我有一个情况,我有一个地图,有一个键和两个值 std::map<std::string, std::pair<double, double> > myMultiValueMap 根据情况,我需要更新一个值或另一个值 我正在寻找插入/查找键并更新此映射中任一值的语法 是的,我以前在映射上使用过insert,但在多值映射上不确定 std::map<std::string,double> myMap; myMap.insert(std::make_pair("12

我有一个情况,我有一个地图,有一个键和两个值

std::map<std::string, std::pair<double, double> > myMultiValueMap
根据情况,我需要更新一个值或另一个值

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

是的,我以前在映射上使用过insert,但在多值映射上不确定

std::map<std::string,double> myMap;
myMap.insert(std::make_pair("12345",0.00));
并查找和更新

std::map<std::string,double>::iterator it =  myMap.find(("12345");
映射需要两个模板参数,一个键和一个值类型。但这取决于您对值使用任意类型

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
}
更新项目:

你应该用这个来工作

using namespace std;

请花点时间阅读

中的示例。我喜欢bkausbk的答案,并会对答案发表评论,但没有rep。Map有时会遇到需要默认构造函数的问题。我是从你那里知道的。我通过设置默认参数使其正常工作。帖子还有其他解决方案

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

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

你有没有试着调用函数呢?你有没有读过std::map的界面,看看你可以使用哪些函数,并且已经尝试了一些东西,或者应该有人为你编写代码?没有多值std::map这样的东西。映射只有一个值,尽管该值可能是包含多个数据段的结构或类。你也可以有一个矢量图。@CaptainObvlious我更喜欢这种方法,因为在代码中很难记住第一个和第二个矢量的含义。.更好地更新:auto&ref=。。。。;dothingsref;。除非只有一个应该更改…请不要建议使用命名空间std;:我不建议这样做。在像op这样的小程序中使用它更容易wants@compileGuy你不知道OP想要的程序大小。好的问题可以将问题缩小到小程序中,目的非常明确,这样读者就不必费劲地阅读几个Kloc。这意味着您通常无法根据OP的问题推断OP实际正在处理的程序的大小。
TestValue(int v1 = 0, int v2 = 0, int v3 = 0) : Value1(v1), Value2(v2), Value3(v3) {}