gpt4 book ai didi

c++ - 如何在另一个类数据成员上定义 `std::set` 排序?

转载 作者:搜寻专家 更新时间:2023-10-31 01:02:19 26 4
gpt4 key购买 nike

我试过但不起作用的代码:

class A {
public:
struct cmpr_t {
bool operator() (int k1, int k2) {
return mp[k1] < mp[k2]; // doesn't compile
}
};

map<int, int> mp; // storing key->value
set<int, cmpr_t> ss; // just keys, ordered by corresponding value in mp
};

我只想要一个map和一个setmap存储数据(键,值),而set 只包含键,我希望 set 按键的对应值排序。

那么如何定义集合呢?

更新

编译器错误:

In member function ‘bool SSet::cmpr_t::operator()(int, int)’:
error: invalid use of non-static data member ‘SSet::mp’
unordered_map<int, int> mp; // k -> v
^
error: from this location
return mp[l] < mp[r];
^
error: invalid use of non-static data member ‘SSet::mp’
unordered_map<int, int> mp; // k -> v
^
error: from this location
return mp[l] < mp[r];
^

最佳答案

class A 
{
struct cmpr_t
{
A* a;
explicit cmpr_t(A* a) : a(a) {}
// ~~~^
bool operator()(int k1, int k2) const
{
return a->mp[k1] < a->mp[k2];
// ~~^ ~~^
}
};
std::map<int, int> mp;
std::set<int, cmpr_t> ss;

public:
A() : ss(cmpr_t(this)) {}
// ~~~~~~~~~~~^
};

关于c++ - 如何在另一个类数据成员上定义 `std::set` 排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27467980/

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