如何使用自定义的重复判断功能进行设置?

黄尼克

我想使用 STL 设置为:

  1. struct在这个集合中插入一个,比如struct {int id, string info};
  2. 对于每个插入,如果 id 存在,则不插入
  3. 使元素排序

我尝试了以下代码:

#include <iostream>
#include <set>
using namespace std;
struct song
{
    int m_id;
    int m_hot;
    song(int id,int hot)
    {

        this->m_id = id;
        this->m_hot = hot;
    }
    bool operator<(const struct song & right)const
    {
        if(this->m_id == right.m_id) {     // remove duplicated
            return false;
        }
        if(this->m_hot != right.m_hot)
        {
            return this->m_hot > right.m_hot;
        }
        else
        {
            return this->m_id > right.m_id;
        }
    }
};
int main()
{
    std::set<song> mySet;
    song s1(10,100);
    song s2(40,700);
    song s3(40,300);
    song s4(30,200);
    song s5(300,200);
    song s6(300,900);
    mySet.insert(s1);
    mySet.insert(s2);
    mySet.insert(s3);
    mySet.insert(s4);
    mySet.insert(s5);
    mySet.insert(s6);
    for(auto it:mySet)
    {
        std::cout<<"id:"<<it.m_id<<",hot:"<<it.m_hot<<std::endl;
    }
}

输出是:

id:300,hot:900
id:40,hot:700
id:300,hot:200
id:30,hot:200
id:10,hot:100

如您所见,id 40 成功删除了重复项,但 300 失败了。我认为 id 300 部分不应该出现两次,有人可以帮我吗?

逻辑材料

operator<不满足严格弱排序,你的要求不能这样表达。

问题是您有两个键,m_id(用于唯一性)和m_hot(用于排序)。您不能选择仅按 订购m_hot您总是必须按两者排序(并忽略等效比较元素),并且您只能选择优先级。因此,您无法在{id=0, hot=0}之间建立等价关系{id=0, hot=1}

^ 如果你的比较器不能写成std::tie(lhs.keys...) < std::tie(rhs.keys...),那就不好了。

目前,我只能考虑m_hot在您需要的地方推迟订购(通过复制到 astd::vector并对其进行排序或插入到std::set具有不同比较器的 a )。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用自定义比较功能进行c ++排序

来自分类Dev

使用`map`系列使用自定义绘图功能进行迭代

来自分类Dev

JSON中的数组未使用Swift中的自定义解码功能进行解析

来自分类Dev

如何使用自定义功能与vtkplotter进行交互?

来自分类Dev

如何使用用户定义的功能进行分组?

来自分类Dev

使用定义的功能进行操作直到

来自分类Dev

如何通过自定义功能对列表进行排序,并丢弃重复项?

来自分类Dev

如何使用功能进行决策

来自分类Dev

Robomongo,如何使用自定义功能?

来自分类Dev

如何对CSS自定义属性进行功能检测?

来自分类Dev

如何对CSS自定义属性进行功能检测?

来自分类Dev

如何在codeigniter中使用“设置间隔”功能进行自动数据库备份?

来自分类Dev

如何在codeigniter中使用“设置间隔”功能进行数据库自动备份?

来自分类Dev

使用自定义比较功能设置相等

来自分类Dev

ZSH自定义功能,如重复

来自分类Dev

如何设置自定义配置文件进行测试?

来自分类Dev

如何设置自定义配置文件进行测试?

来自分类Dev

如何使用进行错误检查的自定义设置器初始化属性?

来自分类Dev

如何对功能进行映射?

来自分类Dev

如何对使用Popen的功能进行单元测试?

来自分类Dev

如何对使用类型提示的功能进行单元测试

来自分类Dev

如何对使用类型提示的功能进行单元测试

来自分类Dev

如何对使用Popen的功能进行单元测试?

来自分类Dev

如何使用超时功能进行无限循环

来自分类Dev

如何使用 pdo db 连接功能进行查询?

来自分类Dev

std :: sort-给定自定义排序功能,一次比较是否可能进行多个排序查询?

来自分类Dev

如何使用自定义损失功能(PU学习)

来自分类Dev

如何为Keras使用自定义损失功能

来自分类Dev

插入后如何使用自定义预加载功能?

Related 相关文章

  1. 1

    使用自定义比较功能进行c ++排序

  2. 2

    使用`map`系列使用自定义绘图功能进行迭代

  3. 3

    JSON中的数组未使用Swift中的自定义解码功能进行解析

  4. 4

    如何使用自定义功能与vtkplotter进行交互?

  5. 5

    如何使用用户定义的功能进行分组?

  6. 6

    使用定义的功能进行操作直到

  7. 7

    如何通过自定义功能对列表进行排序,并丢弃重复项?

  8. 8

    如何使用功能进行决策

  9. 9

    Robomongo,如何使用自定义功能?

  10. 10

    如何对CSS自定义属性进行功能检测?

  11. 11

    如何对CSS自定义属性进行功能检测?

  12. 12

    如何在codeigniter中使用“设置间隔”功能进行自动数据库备份?

  13. 13

    如何在codeigniter中使用“设置间隔”功能进行数据库自动备份?

  14. 14

    使用自定义比较功能设置相等

  15. 15

    ZSH自定义功能,如重复

  16. 16

    如何设置自定义配置文件进行测试?

  17. 17

    如何设置自定义配置文件进行测试?

  18. 18

    如何使用进行错误检查的自定义设置器初始化属性?

  19. 19

    如何对功能进行映射?

  20. 20

    如何对使用Popen的功能进行单元测试?

  21. 21

    如何对使用类型提示的功能进行单元测试

  22. 22

    如何对使用类型提示的功能进行单元测试

  23. 23

    如何对使用Popen的功能进行单元测试?

  24. 24

    如何使用超时功能进行无限循环

  25. 25

    如何使用 pdo db 连接功能进行查询?

  26. 26

    std :: sort-给定自定义排序功能,一次比较是否可能进行多个排序查询?

  27. 27

    如何使用自定义损失功能(PU学习)

  28. 28

    如何为Keras使用自定义损失功能

  29. 29

    插入后如何使用自定义预加载功能?

热门标签

归档