【发布时间】:2014-12-14 09:30:39
【问题描述】:
我试过的代码,但不起作用:
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 和一个set,map 存储数据(键、值),而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];
^
【问题讨论】:
-
cmpr_t无法访问A类的私有成员。 -
@πάνταῥεῖ,我不认为这是问题所在,编译器说
cmpr_t无法访问mp,因为它不是静态数据成员。 -
嵌套结构与它的包含类无关,您不能访问包含类的私有成员。为了使您的问题有效,请照常在您的问题中逐字发布编译器错误。
-
@πάνταῥεῖ,贴错了,我已经做了数据成员
public,还是不能编译。
标签: c++ set comparator