首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何使用不为std:less的<操作符使用std::

如何使用不为std:less的<操作符使用std::
EN

Stack Overflow用户
提问于 2015-07-01 17:03:12
回答 2查看 113关注 0票数 0

说我有

代码语言:javascript
复制
class newVector: public std::vector<T> {
    public:
        bool operator< (const newVector& v) { 
            //..
        }
};

代码语言:javascript
复制
a std::set<newVector>; 

我无法使用a.find(.)正确地说,我不知道该把什么放入(.)以便使用newVector::operator<。当我只使用a.find(元素)时,它使用std::less。我是否应该改变性病::少一点?

EN

Stack Overflow用户

发布于 2015-07-01 17:20:20

您不需要重载向量,也不需要更改std:less,而是单独定义您自己的std::兼容性较差的函数对象

代码语言:javascript
复制
#include <iostream>
#include <vector>
#include <set>
using namespace std;

    struct OppositeVectorComp
    {
        template< class T, class Alloc >
        bool operator()( const std::vector<T,Alloc>& lhs,const std::vector<T,Alloc>& rhs )
        {           
           return   !(lhs < rhs);
        }
    };

int main() {
    std::vector<int> a , b;

    std::set<std::vector<int>> defaultset;
    std::set<std::vector<int>, OppositeVectorComp> myset;

    a.push_back(1);
    b.push_back(2);

    myset.insert(a);
    myset.insert(b);

    defaultset.insert(a);
    defaultset.insert(b);

    std::cout << (*myset.begin())[0] << std::endl; // output 2
    std::cout << (*defaultset.begin())[0] << std::endl; // output 1

    return 0;
}

这里,OppositeVectorComp在向量上定义了一个新的顺序,其中

代码语言:javascript
复制
OppositeVectorComp(a,b) true iff a <b is false

通过使用std::set<std::vector<int>, OppositeVectorComp>类型,我们定义了一个使用自定义std::less的集合。

票数 1
EN
查看全部 2 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31167529

复制
相关文章

相似问题

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