gpt4 book ai didi

c++ - 特殊订购的独特 STL 容器

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:04:06 24 4
gpt4 key购买 nike

我需要一个 STL 容器,它能够:

1) 只存储唯一项

2) 根据项目添加到容器的时间保证顺序

因此,如果我按顺序将项目 A、B 和 C 添加到我的容器中,

A 始终可以通过以下方式访问:myItems().begin()myItems[0]

B 始终可以通过以下方式访问:myItems.begin() + 1myItems[1]

C 始终可以通过以下方式访问:myItems.begin() + 2myItems[2]

我目前使用的 unordered_set 不能满足需求 #2。如果我使用常规 set,我可以指定一个 less than 函数来排序,但排序可能会随着新项目添加到容器中而改变。

使用常规 set,如果我插入一个小于 A 的新项目 D,将无法再通过 myItems.begin() 访问 A。我可能是错的,但这是我对集合排序如何运作的理解。

如果我使用 list,我可以通过在插入每个新项目后调用 list::unique() 来强制执行唯一方面:

myList.sort();
myList.unique();

或者我可以将 std::find 与列表或 vector 一起使用,并手动强制执行独特的方面:

iter = std::find(myList.begin(), myList.end(), item);

//Only add item if not already in list/vector...
if(iter == myList.end())
{
myList.push_back(item);
}

是否有更好的容器/解决方案来满足我的特定需求?

最佳答案

STL 中没有这样的容器,尽管您可以通过混合 std::set/std::unordered_set(检查用于唯一性)和用于排序的 std::deque(或任何其他序列容器)。

Boost 具有多索引容器,如果您可以使用它并想看一看,它们已经为您完成了这项工作。

关于c++ - 特殊订购的独特 STL 容器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13572444/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com