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

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

Patricia Arquette
發布: 2024-12-14 15:50:11
原創
473 人瀏覽過

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

根據另一個向量的值對向量進行排序

考慮這樣一種情況,您有多個相同長度的向量,並且需要對其中一個向量進行排序,同時保持相同的長度所有其他向量的排序順序。當排序值用作其他向量中元素的參考時,這可能很有用。

在提供的程式碼片段中,我們有兩個向量:索引和值。 Index 包含表示所需排序順序的整數,Values 包含將相應排序的字串。

一種方法是建立一個組合 Index 和 Values 元素的對向量,然後使用自訂比較器。操作方法如下:

using myiter = std::vector<int>::const_iterator;

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

size_t n = 0;
for (const auto& it : Index) {
    order[n++] = std::make_pair(n, it);
}

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

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

順序向量現在包含按排序順序排列的索引和值中的元素。您也可以使用它對其他向量進行排序。這是一個執行此操作的函數範本:

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

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

    return ret;
}
登入後複製

使用此函數,您現在可以根據索引指定的順序取得Values 的排序版本:

std::vector<std::string> sortedValues = sort_from_ref(Values, order);
登入後複製

此方法允許您可以以一致的方式有效地對多個向量進行排序,而不需要複雜的迭代解決方案。

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

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