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

时间:2014-03-19 09:29:37

标签: c++ algorithm design-patterns data-structures

让我们说我有这样的结构:

struct Pack
{
    unsigned int id;
    string name;
    string surname;
    string username;
    string address;
};

如果我想搜索给定的"用户名"在这种类型的对象的集合中,我可以存储它们 在std :: map中使用'用户名'作为键和正确的包对象作为值。

但是,如果我还想搜索给定的ID呢?

我遇到这个问题的解决方案是将数据放在另一个数据结构(如链表)和 2个分隔的std :: maps。第一张地图将包含"用户名"键和第二个" id"键。作为值,它们都将具有指向正确Pack对象的指针。

另外,我忘了提一件重要的事情。如果我还想删除一个对象,我还需要删除2 std :: maps中的条目。并且删除程序将变得更重'如果我想增加std :: maps的数量(搜索给定的名字,姓氏等)。

这个问题有更好的解决方案吗?

感谢。

1 个答案:

答案 0 :(得分:0)

如果你想在不同的密钥上进行有效的查找,那么实际上没有办法为每个密钥设置一个地图 - 可能有一些库可以为你抽象,但类似的东西仍然会在幕后发生。

但你根本不需要一个链表。您可以让两个(或所有)地图都直接指向Pack个对象。这些Pack对象不需要驻留在二级结构中。

此外,您可以使用unordered_map而不是map来获得预期的O(1)操作性能,而不是O(log n)。