[英]C++ Sorting multiple columns in a vector of vectors
我正在嘗試使用嵌套向量對多列進行排序,但不確定如何實際執行。 我在這里搜索了一堆帖子,但它們僅顯示如何對最多兩列進行排序,而我知道對一列進行排序如下:
sort(myVector.begin(), myVector.end(), [](vector<int> const a, vector<int> const b){return a[0] < b[0];});
我有一個輸入,用戶輸入向量的大小,向量會相應地生成,我希望能夠對輸出的每一列進行排序。
例如:
未分類
{3, 7, 2}
{9, 6, 8}
{5, 1, 4}
已排序
{3, 1, 2}
{5, 6, 4}
{9, 7, 8}
這是線性代數庫中的經典之作:由於元素訪問的模式,給定矩陣的布局會極大地影響性能。
您面臨完全相同的結果。 顯然,在您的情況下,每個int向量都是一行。 您需要對列進行排序。 您可以做的是移調把戲:
一些代碼來說明這個想法:
std::vector<std::vector<int>> transpose(std::vector<std::vector<int>> const& input) {
// For simplicity, I assume input is well formed, i.e.:
// - All int vectors have the same size
// - input is non-empty.
std::vector<std::vector<int>> tr_input;
for(std::size_t i = 0; i < input.front().size(); ++i) {
std::vector<int> tmp;
for (auto& vec : input) {
tmp.push_back(vec.at(i));
}
tr_input.push_back(tmp);
}
return tr_input;
}
現在我們有了轉置功能,我們可以實現算法了。
std::vector<std::vector<int>> input = { { 3, 7, 2 },
{ 9, 6, 8 },
{ 5, 1, 4 } };
auto tr = transpose(input);
for (auto& v : tr) {
std::sort(v.begin(), v.end());
}
auto sorted = transpose(tr);
可以在此現場演示中查看結果
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.