英文:
What is the default sort behavior of a C++ 2D vector?
问题
当使用stl:sort()对2D向量进行排序时,其默认排序行为是什么?我想知道如果存在并列情况会发生什么?默认比较器会如何工作?
英文:
When sorting a 2d vector using stl:sort(), what is its default sort behavior? I would like to know what happens if there are ties? How would the default comparator work?
答案1
得分: 3
它在两个 std::vector
层面上进行词典顺序比较。这是因为 std::vector::operator<
被指定为按词典顺序比较元素,并且默认情况下 std::sort
使用 <
来比较元素。
std::sort
将始终不指定等价元素的顺序。然而,std::stable_sort
将保持等价元素的顺序与它们的原始顺序相同(并且因此能够这样做而产生性能损失)。
英文:
It compares lexicographically with respect to both std::vector
layers. That's because std::vector::operator<
is specified to compare elements lexicographically and by default std::sort
uses <
to compare elements.
std::sort
will always leave the order of equivalent elements unspecified. std::stable_sort
will however leave the order of equivalent elements identical to their original order (and incurs a performance penalty for being able to do so).
答案2
得分: 0
以下是您提供的代码的中文翻译:
除了其他人的答案之外,这里有一个简单的示例(可能需要较新版本的C++):
#include <algorithm>
#include <iostream>
#include <vector>
using namespace std;
int main()
{
auto x = vector<int>{4, 2, 7};
sort(x.begin(), x.end());
for (auto e : x)
cout << e << " ";
cout << endl;
auto y = vector<vector<int>>{
vector<int>{1, 123},
vector<int>{2, 3},
vector<int>{3, 2},
vector<int>{1, 7},
vector<int>{2, 3}
};
sort(y.begin(), y.end());
for (auto e : y)
cout << e[0] << "," << e[1] << " ";
cout << endl;
}
请注意,我只提供了代码的翻译,没有其他额外的内容。
英文:
In addition to the others' answers, here's a simple example (may require a recent version of C++):
#include <algorithm>
#include <iostream>
#include <vector>
using namespace std;
int main ()
{
auto x = vector{4,2,7};
sort(x.begin(), x.end());
for (auto e : x)
cout << e << " ";
cout << endl;
auto y = vector{
vector{1,123},
vector{2,3},
vector{3,2},
vector{1,7},
vector{2,3}
};
sort(y.begin(), y.end());
for (auto e : y)
cout << e[0] << "," << e[1] << " ";
cout << endl;
}
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论