C++でのソートとインデックスの追跡方法


方法1: インデックスの配列を使用する方法 この方法では、ソートする前の要素のインデックスを追跡するために、別のインデックスの配列を使用します。次のようなコードを使用できます:

#include <iostream>
#include <vector>
#include <algorithm>
struct IndexedElement {
    int index;
    int value;
};
bool compareIndexedElements(const IndexedElement& a, const IndexedElement& b) {
    return a.value < b.value;
}
int main() {
    std::vector<int> elements = {5, 2, 8, 1, 9};
    std::vector<IndexedElement> indexedElements;
    // インデックスの配列を作成する
    for (int i = 0; i < elements.size(); ++i) {
        indexedElements.push_back({i, elements[i]});
    }
// インデックスの配列をソートする
    std::sort(indexedElements.begin(), indexedElements.end(), compareIndexedElements);
    // ソートされた結果を表示する
    for (const auto& indexedElement : indexedElements) {
        std::cout << "Index: " << indexedElement.index << ", Value: " << indexedElement.value << std::endl;
    }
    return 0;
}

方法2: 構造体を使用する方法 この方法では、要素とそのインデックスを1つの構造体にまとめます。次のようなコードを使用できます:

#include <iostream>
#include <vector>
#include <algorithm>
struct Element {
    int index;
    int value;
    bool operator<(const Element& other) const {
        return value < other.value;
    }
};
int main() {
    std::vector<Element> elements = {{0, 5}, {1, 2}, {2, 8}, {3, 1}, {4, 9}};
    // 要素をソートする
    std::sort(elements.begin(), elements.end());
    // ソートされた結果を表示する
    for (const auto& element : elements) {
        std::cout << "Index: " << element.index << ", Value: " << element.value << std::endl;
    }
    return 0;
}

方法3: マップを使用する方法 この方法では、要素をキーとしてインデックスをマップに格納します。次のようなコードを使用できます:

#include <iostream>
#include <vector>
#include <map>
int main() {
    std::vector<int> elements = {5, 2, 8, 1, 9};
    std::map<int, int> indexedElements;
    // インデックスをマップに格納する
    for (int i = 0; i < elements.size(); ++i) {
        indexedElements[elements[i]] = i;
    }
// 要素をソートする
    std::sort(elements.begin(), elements.end());
    // ソートされた結果とインデックスを表示する
    for (const auto& element : elements) {
        std::cout << "Index: " << indexedElements[element] << ", Value: " << element << std::endl;
    }
    return 0;
}

これらの方法を使用することで、C++で要素のソートとインデックスの追跡が可能です。必要に応じて、これらのコード例を参考にして実際のプログラムに組み込んでください。