【发布时间】:2014-11-10 08:53:18
【问题描述】:
我正在使用std::map 的find() 方法,它返回一个迭代器。
但是我需要找到元素的 index ;例如:0,对应std::map::begin(),以此类推。
#include <map>
#include <utility>
#include <iostream>
int main()
{
std::map< int, int > aMap;
aMap.insert( std::make_pair(100, 50) );
aMap.insert( std::make_pair(200, 40) );
aMap.insert( std::make_pair(300, 60) );
std::map< int, int >::iterator it_map = aMap.find(300);
if (it_map != aMap.end())
std::cout << it_map << "\n"; // error
}
那不编译,我知道原因。但是,我需要一种打印 2 的方法,因为 300 的索引是 2。
对于这个简单的例子,你可能会说 map(二叉树)不是一个好的容器。但是,在实际代码中,我必须搜索大量元素,而二叉树对此很有用。
有什么想法吗?
【问题讨论】:
-
如何定义二叉树结构的索引?
-
@40two:地图不一定是实现为树,也没有树状接口;但它是有序的,因此您可以根据问题描述的顺序定义索引。
-
@MikeSeymour 根据标准,它不一定作为树实现,同意。然而,在我所知道的每一个实现中,都是以树的形式实现的。此外,当插入或提取发生时,任何先前的顺序都会被打乱。因此,正如您正确回答的那样,您可以定义一个索引,但仅限于
std::map的当前状态。