首頁 > 後端開發 > C++ > 如何根據參考向量同時對多個向量進行排序?

如何根據參考向量同時對多個向量進行排序?

Patricia Arquette
發布: 2025-01-03 18:16:43
原創
214 人瀏覽過

How to Sort Multiple Vectors Simultaneously Based on a Reference Vector?

基於外部參考向量對向量進行排序

在存在多個長度相等的向量的情況下,對一個向量進行排序需要一個解決方案:同時相應地變換所有其他向量。

考慮以下內容場景:

std::vector<int> Index = { 3, 1, 2 };
std::vector<std::string> Values = { "Third", "First", "Second" };
登入後複製

轉換:索引已排序。

預期結果:數值也應該排序。

一種方法涉及建立一個向量,其中包含原始索引和排序指令中的元素向量:

typedef vector<int>::const_iterator myiter;

vector<pair<size_t, myiter>> order(Index.size());

size_t n = 0;
for (myiter it = Index.begin(); it != Index.end(); ++it, ++n)
    order[n] = make_pair(n, it);
登入後複製

接下來,對這個向量進行排序:

struct ordering {
    bool operator ()(pair<size_t, myiter> const&amp; a, pair<size_t, myiter> const&amp; b) {
        return *(a.second) < *(b.second);
    }
};

sort(order.begin(), order.end(), ordering());
登入後複製

排序順序允許重新排列其他向量:

template <typename T>
vector<T> sort_from_ref(
    vector<T> const& in,
    vector<pair<size_t, myiter>> const& reference
) {
    vector<T> ret(in.size());

    size_t const size = in.size();
    for (size_t i = 0; i < size; ++i)
        ret[i] = in[reference[i].first];

    return ret;
}
登入後複製

以上是如何根據參考向量同時對多個向量進行排序?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板