搜索和地图项目,在C++

问题描述:

3个元件插入我需要有一个地图这样的:搜索和地图项目,在C++

typedef std::map<int, float , char> Maptype ; 

什么是插入并在此地图搜索对元素的语法。

+2

哪一个是关键? – sbi 2010-03-06 10:17:54

+0

请检查你没有得到困惑。如果地图是排序命令,地图可以包含第三个元素。 – Owl 2016-10-12 12:56:52

A map只能将一种密钥类型映射到一种数据类型。如果数据包含2个元素,请使用结构或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; 
+0

避免通过指定参考将该对复制出地图: std :: pair &val = m [245]; – 2010-03-21 14:57:31

你不能有三个元素。 STL map存储键值对。你需要决定你将用什么作为关键。一旦这样做,你也许可以嵌套其他两个在一个单独的地图,并把它作为:

typedef std::map<int, std::map<float, char> > MapType; 

为了在地图中插入,使用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 ... 
} 

此外,你可以看看Boost.Tuple

+0

感谢您的信息。如何在Map中搜索这对。 它会是m.find(STD :: make_pair(3.2,'a');? – John 2010-03-06 11:29:12

+0

@John:你总是搜索密钥,如果你的密钥是'pair '类型,那么这就是你传递的参数为'map :: find'。注意,在一个映射中,第一个参数是键,第二个是键的值,可以是复杂类型,但键总是'const',不能是分配给 – dirkgently 2010-03-06 17:41:16

+0

@dirkgently:上面的例子不起作用,如果我使用两个类指针实例和一个字符串,就像typedef std :: map > – kar 2016-02-18 21:45:28

二者必选其一

std::map<std::pair<int, float>, char> 

std::map<int, std::pair<float, char> > 

无论是正确的。

+0

请注意,前者需要一个重载的'operator sbi 2010-03-06 10:29:31

+2

std :: pair已经有operator Tronic 2010-03-06 10:37:34

+0

@Tronic:是否? sbi 2010-03-06 13:48:40