C++ 如何在嵌套映射(C+;+;)中有效地搜索密钥?

C++ 如何在嵌套映射(C+;+;)中有效地搜索密钥?,c++,nested,multimap,C++,Nested,Multimap,我有一个嵌套的多重映射结构,如: typedef std::vector< struct > dataVector_t; typedef std::map< int, dataVector_t > intMap_t; typedef std::multimap< int1, intMap_t > intMultiMap_t 我还研究了使用equal_range来标识innerMap的范围,然后使用lower_bound来查找innerKey,但似乎我

我有一个嵌套的多重映射结构,如:

typedef std::vector< struct > dataVector_t;
typedef std::map< int, dataVector_t > intMap_t;    
typedef std::multimap< int1, intMap_t > intMultiMap_t
我还研究了使用equal_range来标识innerMap的范围,然后使用lower_bound来查找innerKey,但似乎我必须逐个元素循环,直到找到innerKey

在内部映射中搜索innerKey最有效的方法是什么

通常,在
std::map
中搜索关键字的最有效方法是使用
find
成员函数:

auto innerIt = outerIt->second.find(innerKey);

您是否仅限于C++03
std::无序的_-map
可能更快。如果目标是“高效地”完成,那么这是错误的容器或数据结构;因为除了以这种方式进行迭代之外,没有其他方法了。您需要这种嵌套数据结构做什么?它应该解决什么问题?你的程序在做什么?这个
getInnerMap
应该做什么?此条件
outerIt!=for循环中的outerMap.upper_bound(outerKey)
是一种代码气味。这是一种。我投票以“Seek debugging help…”结束,因为没有描述它应该做什么以及如何复制它。所以我认为这基本上就是我正在做的…从嵌套的multimap-map结构创建一个独立的映射,然后使用find()、lower_bound()或upper_bound()进行搜索@ScottP为什么要创建内部映射的副本?这样我就可以使用lower_bound()搜索innerKey了。@ScottP为什么不像我的示例中那样通过
outerIt
进行搜索?我认为find()只能用于容器本身,而不是指向容器的迭代器?当我尝试实现这个示例时,它不会编译。也许我做错了什么。如果我在外部容器上使用find进行搜索,它会在外部多重映射中查找int,而不是在内部映射中查找int。
auto innerIt = outerIt->second.find(innerKey);