让我们说我有这样的结构:
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的数量(搜索给定的名字,姓氏等)。
这个问题有更好的解决方案吗?
感谢。
答案 0 :(得分:0)
如果你想在不同的密钥上进行有效的查找,那么实际上没有办法为每个密钥设置一个地图 - 可能有一些库可以为你抽象,但类似的东西仍然会在幕后发生。
但你根本不需要一个链表。您可以让两个(或所有)地图都直接指向Pack
个对象。这些Pack
对象不需要驻留在二级结构中。
此外,您可以使用unordered_map
而不是map
来获得预期的O(1)操作性能,而不是O(log n)。