优化对象中不同字段的搜索
Optimized search for different fields in an object
假设我有一个这样的结构:
struct Pack
{
unsigned int id;
string name;
string surname;
string username;
string address;
};
如果我想在这种类型的对象集合中搜索给定的"username",我可以存储它们在std::map中,以'username'作为键,并以适当的包对象作为值。
但是如果我也想搜索一个给定的ID呢?
我想到的解决这个问题的办法是把数据放在另一个数据结构中(比如链表)2分隔的std::maps。第一个映射将具有"username"键,第二个映射具有"id"键。作为值,它们都有一个指向适当的Pack对象的指针。
还有,我忘了提一件重要的事。如果我还想删除一个对象,我还需要从两个std::map中删除条目。如果我想增加std::map的数量(搜索给定的名字,姓氏等),删除过程将变得"更重"。
这个问题有更好的解决办法吗?
谢谢。
如果你想对不同的键进行有效的查找,真的没有办法绕过每个键都有一个映射-可能有库为你抽象了这一点,但在幕后仍然会发生类似的事情。
但是你根本不需要一个链表。您可以让两个(或所有)映射都有直接指向Pack
对象的指针。没有必要将这些Pack
对象驻留在二级结构中。
此外,您可以使用unordered_map
而不是map
来获得预期的O(1)操作性能,而不是O(log n)。
相关文章:
- 将结构字段的类型展开为可变模板参数
- 将位字段导出到数组
- 为了方便起见,我应该避免公开私有字段变量吗
- 当字段可以为null时,如何使用C++接口在Avro中写入数据
- 在java中读取c++字节的位字段
- 链接器找不到在虚拟类 c++ 中访问的静态字段的符号
- 私有字段对象与私有继承?
- 声明没有默认构造函数的字段
- C++内存模型和位字段的最大序列
- 声明为无效的变量或字段'...' Ardunio 编译器上的错误
- 如何在QByteArray中放置和检索位字段而不会感到痛苦?
- C++ win32 如何使密码字段可选并启用复制和粘贴?
- 如何使用 stl 容器有效地存储对象?(即根据其字段的值进行搜索)
- 如何在 中输入记录的一个字段时搜索记录
- 在特定字段中关键字搜索后,从文本文件中提取多个记录
- 在Boost多索引容器中搜索位字段数据
- 在文本文件中搜索字段名称,并将所有后续行返回到控制台 - C++
- 基于多个字段搜索大型数据集的有效方法
- 搜索避免在类模板中创建字段的技巧
- 优化对象中不同字段的搜索