![]() |
1
20
你可以使用 boost::multi_index 创建一个 bidirectional map -您可以使用对的任意一个值作为键进行快速查找。 |
![]() |
2
16
如果你能接触到优秀的 boost 图书馆,那么你应该用 boost::multi_index 创造 bidirectional map 正如马克所说。与std::map不同,这允许您通过键或值进行查找。 如果您只有STL可供使用,那么下面的代码就可以实现这一点(模板化以使用映射类型支持operator==)的任何类型的映射:
|
![]() |
3
15
是:维护两个映射,一个使用一种键,另一个使用另一种键。
不,它是对排序树的二进制搜索:它的速度是O(log(n))。 |
![]() |
4
6
查看Boost的双向映射: http://www.boost.org/doc/libs/1_38_0/libs/bimap/doc/html/index.html 它让两个值都像一个键。 否则,迭代就是前进的道路。 |
![]() |
5
4
尝试此功能:
我觉得这很有用 |
![]() |
6
2
不,您必须循环遍历std::map并手动检查所有值。根据您想要做的,您可以将std::map包装在一个简单的类中,该类还缓存插入到映射中的所有值,这些值很容易搜索并且不允许重复,例如std::set。不要从std::map继承(它没有虚拟析构函数!),但请将其包装,以便您可以执行以下操作:
除了滚动你自己的地图之外,另一个选择是使用双向地图,这很容易在下面的帖子中找到,或者通过谷歌找到。 这真的取决于你想做什么,你想多久做一次,以及相对于安装和使用Boost,滚动你自己的小包装类有多困难。我喜欢Boost,所以这是一个很好的方法-但是有一个很好和完整的方法来创建自己的包装类。您可以直接理解操作的复杂性,并且可能不需要Boost双向映射提供的值的完全反向映射=>键。 |
![]() |
7
1
你所要求的正是 std::find 不(不是成员函数)
|
![]() |
8
0
不是一个非常好的选项,但在用户在初始化时分配默认值(如0或空)的少数情况下可能有用。
|
![]() |
9
0
我添加这个答案,如果有人来到这里,寻找C++ 11及以上。
|
![]() |
10
-3
可能我不完全理解你想完成什么。但是为了简单地测试一个映射是否包含一个值,我相信您可以使用
|
![]() |
Bob · BFS用映射C替换数组++ 7 年前 |
![]() |
aghast · 如何在std::map中放置POD结构? 7 年前 |
![]() |
killer · 地图声明未编译[重复] 7 年前 |
![]() |
ksl · 在类声明中初始化常量成员变量时,调试模式中出现异常 7 年前 |
![]() |
Ahmed Atteya · C++std::map在未找到键时添加值 7 年前 |
![]() |
Leo Lai · std::map中的基元类型值是否已初始化? 8 年前 |
|
user6421810 · C++映射未正确插入 9 年前 |
![]() |
user3794186 · C++std::map保存任意类型的值 10 年前 |