我正在尝试创建一个地图,例如:[{11,"Jitendra", 15.5}, {12, "Pranay", 15.5}]
,其中第一个大括号之间的数据变为 key ,而第二个大括号之间的数据变为 values 。我尝试使用的任何技术都会导致错误。
请让我知道如何声明STL映射,插入和操作值?
答案 0 :(得分:1)
复合变量可用作映射的键,只要它们与operator<
(请参阅std::less)具有可比性即可。最简单的情况是使用std::pair
:
std::map<std::pair<int, std::string>, int> mymap; // key: int, string; value: int
您可以使用C ++ 11中引入的std::tuple
来扩展任意数量的关键元素的概念。
成对和元组都带来自己的比较器重载(请参见例如元组here),因此,如果您的元组元素本身是可比较的,并且对可以使对/元组的第一个元素上的优先级,然后是第二个元素,依此类推。使用std::make_pair()
或std::make_tuple()
方便地创建它们。但是,它也可以像这样(C ++ 17):
std::map<std::tuple<int, int>, std::tuple<int, int>> foo;
// insert
foo[{1,2}] = {3,4};
// access
auto [v1, v2] = foo[{1,2}];
std::cout << v1 << ", " << v2 << std::endl;
为获得最大的灵活性,您可以使用struct
并为地图提供一个比较器来排序其元素,从而进一步扩展它。如果您的编译器生活在月球之下并且不支持C ++ 11,您也可以这样做。