使用C++中的3个元素在地图中搜索和插入

Joh*_*ohn 5 c++ stl

我需要这样的地图:

typedef std::map<int, float , char> Maptype ;
Run Code Online (Sandbox Code Playgroud)

在此映射中插入和搜索pair的元素的语法是什么.

ken*_*ytm 14

A map只能将一种密钥类型映射到一种数据类型.如果数据包含2个元素,请使用结构或a std::pair.

typedef std::map<int, std::pair<float, char> > Maptype;
...
Maptype m;
m[123] = std::make_pair(0.5f, 'c');
...
std::pair<float, char> val = m[245];
std::cout << "float: " << val.first << ", char: " << val.second << std::endl;
Run Code Online (Sandbox Code Playgroud)


dir*_*tly 7

你不能有三个要素.STL map存储键值对.您需要决定将要用作关键字的内容.完成后,您可以将其他两个嵌套在一个单独的地图中,并将其用作:

typedef std::map<int, std::map<float, char> > MapType;
Run Code Online (Sandbox Code Playgroud)

要在地图中插入,请使用operator[]insert成员函数.您可以搜索使用find成员函数.

MapType m;
// insert
m.insert(std::make_pair(4, std::make_pair(3.2, 'a')));
m[ -4 ] = make_pair(2.4, 'z');
// fnd
MapType::iterator i = m.find(-4);
if (i != m.end()) { // item exists ...
}
Run Code Online (Sandbox Code Playgroud)

另外你可以看看Boost.Tuple.


ava*_*kar 6

使用其中之一

std::map<std::pair<int, float>, char>
Run Code Online (Sandbox Code Playgroud)

要么

std::map<int, std::pair<float, char> >
Run Code Online (Sandbox Code Playgroud)

哪个是正确的.

  • std :: pair已经有运算符<(它进行词典比较). (2认同)