我试图创建一个映射,类似于:[{11,“Jitendra”,15.5},{12,“Pranay”,15.5}]
,其中第一个花括号之间的数据成为键,第二个花括号之间的数据成为值。 无论我尝试什么技术都会导致错误。
请让我知道我如何声明一个STL映射,插入和操作值?
复合变量可以用作映射的键,只要它们与运算符<
具有可比性(请参阅std::less)。 最简单的情况是使用std::pair
:
std::map<std::pair<int, std::string>, int> mymap; // key: int, string; value: int
您可以使用C++11中引入的std::tuple
,用任意数量的关键元素扩展这个概念。
pair和tuple都有自己的比较器重载(例如,请参见此处的tuple),因此,如果tuple元素本身具有可比性,并且对优先于pair/tuple的第一个元素,然后是第二个元素,依此类推,那么您就不需要做进一步的工作了。 使用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,您也可以这样做。