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

Boy*_*lev -4 c++ stack stl data-structures

说我有两个堆栈:

stack<int> s1, s2;
Run Code Online (Sandbox Code Playgroud)

然后我在其中推送一些值:

s1.push(2);
s1.push(4);
s1.push(5);

s2.push(1);
s2.push(2);
s2.push(10);
Run Code Online (Sandbox Code Playgroud)

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

PS我想这也适用于队列,deques,列表.

Cor*_*mer 5

如果您阅读文档,请operator>说明

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

因此,他们将比较第一个元素,如果它们相等则移动到第二个元素,等等.

你可以在这里阅读更多关于词典比较的内容.

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

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