gpt4 book ai didi

c++ - Boost 或 C++11 中是否有一个容器充当队列但具有独特的元素?

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

我正在寻找像 std::queue 这样的容器,它将添加元素(例如,一个自定义类,其字段 id 类型为 uint) 最后,但如果该对象尚未在容器内。

只有当 id 相等时(我重载了运算符 ==),我的类的两个元素才被认为是相等的。

C++11 或 Boost 中是否存在这样的容器?

最佳答案

这被称为混合队列。天真的实现是使用这样的东西:

std::set<your_key_t> unique;
std::queue<your_data_t> q;

void enqueue(your_data_t x) {
if (unique.insert(x.key).second) {
q.push(std::move(x));
}
}

your_data_t dequeue(your_data_t dflt) {
if (!q.empty()) {
your_data_t x = std::move(q.front()); q.pop();
unique.erase(q.front().key);
return x;
}
else return dflt;
}

一个不太天真的实现可能是以某种重要的方式(比如覆盖)将传入的数据与队列中的数据合并,而不是仅仅丢弃更新。

关于c++ - Boost 或 C++11 中是否有一个容器充当队列但具有独特的元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22255781/

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