0

2列のデータがあります。例えば、

[78、c]

[28、a]

[34、g]

番号を並べ替えて注文情報を教えてくれる組み込み関数があるかどうかを確認したい。たとえば、(小さいものから大きいものへ)2番目の行の1番目の列要素が最小であるため、関数は[2、3、1]を返します。

4

1 に答える 1

1

あなたのデータ構造は何ですか?

C ++ / CLIを使用している場合は、.NETFramework全体を利用できます。

とはいえ、順序を教えてくれるものは何も組み込まれていないと思います。私はすべてが実際にそのようなことをするだろうと信じています。

ソートされたリストではなく、本当に注文が必要な場合は、これで十分だと思います。これにより、元のリストの位置を記憶する新しいオブジェクトが作成され、それらが並べ替えられてから、元のインデックスが何であったかが読み取られます。

// I'm assuming you have a class similar to this already.
ref class MyData
{
public:
    int number;
    String^ letter;
};

ref class SortHelper : IComparable<SortHelper^>
{
public:
    MyData^ data;
    int originalIndex;

    SortHelper(MyData^ data, int index)
    {
        this->data = data;
        this->originalIndex = index;
    }

    virtual CompareTo(SortHelper^ other)
    {
        return this->data->number.CompareTo(other->data->number);
    }
};

void List<int> GetSortedIndexes(List<MyData>^ input)
{
    List<SortHelper>^ working = gcnew List<SortHelper>();
    for(int i = 0; i < input->Count; i++)
    {
        working->Add(gcnew SortHelper(input[i], i));
    }

    working->Sort();

    List<int>^ result = gcnew List<int>();        
    for each(SortHelper^ helper in working)
    {
        result->Add(helper->originalIndex);
    }

    return result;
}
于 2012-04-27T18:54:41.873 に答える