优化对象中不同字段的搜索

Optimized search for different fields in an object

本文关键字:字段 搜索 对象 优化      更新时间:2023-10-16

假设我有一个这样的结构:

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)。