首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何定义另一个类数据成员的‘`std::set`’排序?

如何定义另一个类数据成员的‘`std::set`’排序?
EN

Stack Overflow用户
提问于 2014-12-14 09:30:39
回答 1查看 260关注 0票数 2

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

代码语言:javascript
复制
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

那么如何定义集合呢?

更新

编译器错误:

代码语言:javascript
复制
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];
                            ^
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-12-14 09:45:38

代码语言:javascript
复制
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)) {}
    //       ~~~~~~~~~~~^ 
};                  
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27467980

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档