Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/163.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 基本标准集逻辑_C++_Std - Fatal编程技术网

C++ 基本标准集逻辑

C++ 基本标准集逻辑,c++,std,C++,Std,这个问题可能很无聊,但我想确定一下。 假设我有一个结构: struct A { int number; bool flag; bool operator<(const A& other) const { return number < other.number; } }; 结构A { 整数; 布尔旗; bool操作符标志成员在这里是完全不相关的。集合找到了一个元素,该元素相当于搜索到的值,关于,标志成员在这里是完全不

这个问题可能很无聊,但我想确定一下。 假设我有一个结构:

struct A
{
    int number;
    bool flag;

    bool operator<(const A& other) const
    {
        return number < other.number;
    }
};
结构A { 整数; 布尔旗;
bool操作符标志成员在这里是完全不相关的。
集合
找到了一个元素,该元素相当于搜索到的值,关于,
标志
成员在这里是完全不相关的。
集合
找到了一个元素,该元素相当于搜索到的值,关于有序容器(set、multiset、map、multimap)使用一个谓词来建立元素顺序并查找值,即小于谓词

如果两个元素都不小于另一个,则认为两个元素相等

如果“相等”,则此概念可能与您可能有的其他相等概念不同。有时,最好使用术语“等效”来区分由小于顺序所产生的此概念与可能同时存在的其他特殊相等概念(例如,重载的
运算符==

对于“sane”值类型(也称为常规类型),特殊相等和小于诱导相等要求相同;许多自然发生的类型是常规类型(例如算术类型(如果删除了NAN))。在其他情况下,特别是如果小于谓词是外部提供的,而不是由类型本身提供的,则小于等价类完全可能包含许多非“相等”值。

有序容器(set、multiset、map、multimap)使用一个谓词建立元素顺序并查找值,即小于谓词

如果两个元素都不小于另一个,则认为两个元素相等

如果“相等”,则此概念可能与您可能有的其他相等概念不同。有时,最好使用术语“等效”来区分由小于顺序所产生的此概念与可能同时存在的其他特殊相等概念(例如,重载的
运算符==


对于“sane”值类型(也称为常规类型),特殊相等和小于诱导相等要求相同;许多自然发生的类型是常规类型(例如算术类型(如果删除了NAN))。在其他情况下,特别是如果小于谓词是外部提供的,而不是由类型本身提供的,则小于等价类完全可能包含许多非“相等”值。

来自set的文档

如果两个对象a和b都不相同,则认为它们是等效的(不是唯一的) 比较小于另一个:!comp(a,b)和&!comp(b,a)

在模板中,您可以看到

template<
    class Key,
    class Compare = std::less<Key>,
    class Allocator = std::allocator<Key>
> class set;
模板<
类密钥,
类比较=标准::更少,
类分配器=std::分配器
>类集合;
std::less


将调用set文档中的
操作符

如果两个对象a和b都不相同,则认为它们是等效的(不是唯一的) 比较小于另一个:!comp(a,b)和&!comp(b,a)

在模板中,您可以看到

template<
    class Key,
    class Compare = std::less<Key>,
    class Allocator = std::allocator<Key>
> class set;
模板<
类密钥,
类比较=标准::更少,
类分配器=std::分配器
>类集合;
std::less


将调用
运算符不是使用默认相等运算符吗?@DragonRock:不,它使用的是顺序比较器。@KerrekSB我今天学到了一些东西,谢谢!
!(也不是使用默认相等运算符吗?@DragonRock:不,它使用的是顺序比较器。@KerrekSB我今天学到了一些东西,谢谢!
!(a)