如何制作一个 C++ 映射容器,其中键是值的一部分?
问题描述
我想存储一堆键值对象,但是值对象本身(以及对它的引用)知道它的键.我还想有效地查找仅给定键的这些对象.
I want to store a bunch of key-value objects, but where the value object itself (and references to it) knows its key. I also want to efficiently lookup these objects given only the key.
- std::map
- 似乎要求存储是一个std::pair,这样值就不能访问密钥.如果 value 包含 key,则需要对其进行复制.
- 实际上并不强制值中的键不会以某种方式改变
- 看起来是一个非常好的解决方案,使用自定义比较方法通过键提供唯一性,直到您意识到它使您的整个值变为常量,而不仅仅是键字段.
- 可以使用线性搜索,或者如果项目保持排序则进行二分搜索.但是我怀疑这在性能方面并不是最优的,需要某种额外的层才能真正实现所需的行为.
- 是否可以使用与 std::set 中包含的不同类型的元素来执行搜索和删除?
- unique_ptrs 集的原始指针查找
- 通过多个键索引对象:如何多键索引查询STL map容器?
- 高效实现双映射:有没有更高效的双向地图实现方式?
推荐答案
C++14
std::set::find
非关键搜索C++14
std::set::find
non-key searches如 http://en.cppreference.com/w/中所述cpp/container/set/find C++14 新增了两个
find
API:As mentioned at http://en.cppreference.com/w/cpp/container/set/find C++14 has added two new
find
APIs:main.cpp
允许你这样做:
main.cpp
在 Ubuntu 16.10,
g++
6.2.0 上测试,使用:Tested on Ubuntu 16.10,
g++
6.2.0, with:使用自定义类代替
less<>
这使事情更加明确,并允许您为每个类编写多个比较器:
This makes things a bit more explicit and allows you to write multiple comparators per class:
另请参阅
这篇关于如何制作一个 C++ 映射容器,其中键是值的一部分?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!