在声明集合的同时,
set <int, greater <int> > gquiz1;
为什么使用greater <int>
。我刚开始学习,我还提到了其他文章,但它们并不令人信服。
答案 0 :(得分:2)
std::set
是一个包含有序对象集的容器。
对象的顺序由第二个参数确定。默认情况下,它是std::less<Key>
。有关更多详细信息,请参见definition of std::set。但是,您可以使用自己的Compare
类型作为第二个参数来覆盖默认参数,就像在已发布的代码中所做的那样。
例如
std::set<int> set1; // Use default compare class, std::less<int>
set1.insert(10);
set1.insert(5);
set1.insert(7);
上述容器中对象的顺序为5、7和10。容器中的对象以递增或递增的顺序排序。
如果您使用
std::set<int, std::greater<int>> set2;
set2.insert(10);
set2.insert(5);
set2.insert(7);
上述容器中对象的顺序为10、7和5。容器中的对象按递减顺序排序。
答案 1 :(得分:1)
std::set
中的declaration看起来像这样:
template<
class Key,
class Compare = std::less<Key>,
class Allocator = std::allocator<Key>
> class set;
条目继续说:
std::set
是一个关联容器,其中包含一组排序的 键类型的唯一对象。使用键比较完成排序 函数比较。
默认情况下,密钥比较是使用std::less
完成的,这意味着传入的条目将插入到小于要比较的集合中的项目的第一个位置。反对。
在您的示例中,插入是使用std::greater
比较执行的,这将导致一个集合,其中条目按与默认情况相反的顺序排列。
答案 2 :(得分:0)
在set中,数字的默认顺序为从低到高。
要使其从高到低,我们必须使用var options = new TransferOptions();
options.AddRawSettings("Masks", "*.*html; *.htm; *.txt; *.php; *.php3; ...");