繁体   English   中英

插入 std::set 作为 std::map 的键

[英]Inserting std::set as keys to std::map

我使用std::set<std::uint32_t>作为std::map键。 我在cppreference上读到std::set通过两个std::set std::lexicographical_compare实现比较操作 - 这实际上意味着什么?

另外,两个std::set是否有可能插入相同的std::uint32_t ,但顺序不同,评估结果不相等?

这意味着它所说的 - 比较两个集合是按字典顺序进行的

同一个网站会告诉您如果您只需点击一下这意味着什么

字典比较是具有以下属性的操作:

  • 两个范围逐个元素地进行比较。
  • 第一个不匹配元素定义哪个范围在字典上比另一个范围小或大。
  • 如果一个范围是另一个范围的前缀,则较短的范围按字典顺序小于另一个范围。
  • 如果两个范围具有相同的元素并且长度相同,则这两个范围在字典序上是相等的。
  • 空范围按字典顺序小于任何非空范围。
  • 两个空范围在字典上是相等的。

简而言之,它基本上意味着从左到右 ( ref ) 的直观逐个元素比较。

至于你的第二个问题,无论你插入元素的顺序如何, set<int>的内容都是按数字递增的顺序排列的,所以不是。

我在 cppreference 上读到std::set通过两个std::set std::lexicographical_compare实现比较操作 - 这实际上意味着什么?

这意味着std::set的比较运算符以操作数的元素范围为参数调用std::lexicographical_compare ,并返回结果。 std::lexicographical_compare比较操作数范围的字典顺序。 这与用于对字典中的单词进行排序的顺序相同。

另外,两个std::set是否有可能插入相同的std::uint32_t s,但顺序不同......

std::set是有序的。 所有具有相同比较函数的集合具有相同的顺序。 比较少的元素在比较高的元素之前。 因此,如果两个元素和比较函数相同,则集合在字典比较中比较相等。

如果比较函数是无状态的,那么它的所有实例都会产生相同的顺序。 理论上,有状态的比较函数可以为不同的集合产生不同的顺序。 我建议避免这种违反直觉的比较函数。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM