gpt4 book ai didi

c++ - 在std::set中按键查找

转载 作者:行者123 更新时间:2023-12-01 15:13:08 25 4
gpt4 key购买 nike

我苦于应该支持自定义比较操作的std::set。我的目标是仅使用key参数即可调用find,而无需首先创建set类型的对象。像这样:

#include <set>
#include <cstdint>
#include <vector>

class TestItem {
public:
std::uint64_t id; // key
std::vector<double> areas; // some other data
};

struct TestItemCompare {
bool operator()(const std::uint64_t& lhs, const std::uint64_t& rhs) {
return lhs < rhs;
}
bool operator()(const std::uint64_t& lhs, const TestItem& rhs) {
return lhs < rhs.id;
}
bool operator()(const TestItem& lhs, const std::uint64_t& rhs) {
return lhs.id < rhs;
}
bool operator()(const TestItem& lhs, const TestItem& rhs) {
return lhs.id < rhs.id;
}
};

int main() {
std::set<TestItem, TestItemCompare> store;
std::uint64_t id = 0;
TestItem t;
t.id = 0;

auto it1 = store.find(t); // compiles
auto it2 = store.find(id); // fails to compile

return 0;
}

我以为这是有可能的...

最佳答案

有可能的。但是您的比较器必须是透明的。并且functor中的成员函数需要为const

struct TestItemCompare {
using is_transparent = int; // actually any alias will do, void, custom type
bool operator()(const std::uint64_t& lhs, const std::uint64_t& rhs) const {
return lhs < rhs;
}
bool operator()(const std::uint64_t& lhs, const TestItem& rhs) const {
return lhs < rhs.id;
}
bool operator()(const TestItem& lhs, const std::uint64_t& rhs) const {
return lhs.id < rhs;
}
bool operator()(const TestItem& lhs, const TestItem& rhs) const {
return lhs.id < rhs.id;
}
};

关于c++ - 在std::set中按键查找,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61587849/

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