C++ STL 关系运算符如何比较堆栈

How do the C++ STL relational operators compare stacks?

本文关键字:比较 堆栈 何比较 STL 关系 运算符 C++      更新时间:2023-10-16

假设我有两个堆栈:

stack<int> s1, s2;

然后我在它们中推送一些值:

s1.push(2);
s1.push(4);
s1.push(5);
s2.push(1);
s2.push(2);
s2.push(10);

当我像这样比较它们时bool isEqual = (s1 > s2);它会产生True.但是为什么?并非所有 s1 的元素都大于相应的 s2 元素,也不是所有元素的总和都大于 s2。STL数据结构之间的确切比较方法是什么?

附言我想这也适用于队列、deques、列表。

如果您阅读operator>的文档,它说

按字典顺序比较堆栈中的值

因此,他们将比较第一个元素,如果这些元素与第二个元素相等,依此类推。

您可以在此处阅读有关词典比较的更多信息。

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

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