1

私はC++の初心者です。C# を使用する前に。以下は C# スクリプトです。これらと同じことをネイティブ C++ で行うにはどうすればよいですか?

必要なのは次のとおりです。

  • リストなどには int-int キーと値のペアがあります
  • 値で自動ソートできます。そうでない場合は、キーでソート可能である必要があり、値のインデックスを取得できます(私の値はそれぞれ明確です)

試してみstd::mapましたが、値による並べ替えや値によるキーの取得が組み込まれていません。sortedlistC++には c#のようなものがありますか?

どうもありがとうございました!

public static SortedList<int, int> sortedList1 = new SortedList<int, int>();

static void List_Add(int i) // 0 < i < 1000
{
    if (!sortedList1.ContainsValue(i))
        sortedList1[Environment.TickCount] = i;
}

static void List_Remove(int i) // 0 < i < 1000
{
    if (sortedList1.ContainsValue(i))
        sortedList1.RemoveAt(sortedList1.IndexOfValue(i));
}

static int List_toInt()
{
    int time = 0;
    int keys = 0;
    bool modifier = false;
    foreach (KeyValuePair<int, int> i in sortedList1)
    {
        if (i.Value > 90) modifier = true;
        if (i.Key - time > 200 | modifier | keys > 1000)
        {
            keys = keys * 1000 + i.Value;
            time = i.Key;
        }
    }
    return keys;
}
4

3 に答える 3

3

通常、物事はキーを使用してソートされ、クエリは値を使用せずにキーを使用して行われるため、間違った方法で行っているようです。ただし、std::map<int,int>ここで役立つようです。値をマップのキーとして使用し、キーを値として使用するだけです (値を使用してクエリを実行できるようにするため)。重複が許可されている場合は、マルチマップを使用してください。

于 2013-04-23T08:06:41.250 に答える
1

これはいくつかの変換ツールです。
次のリンクにアクセスしてください。

于 2013-04-23T08:06:31.817 に答える
1

そのように:

#include <map>
#include "Winbase.h"

std::map<int, int> sortedList1;

void List_Add(int i) // 0 < i < 1000
{
    if (sortedList1.find(i) == sortedList1.end())
        sortedList1.insert(std::make_pair<int, int>(GetTickCount(), i));
}

void List_Remove(int i) // 0 < i < 1000
{
    if (sortedList1.find(i) != sortedList1.end())
        sortedList1.erase(sortedList1.find(i));
}

int List_toInt()
{
    int time = 0;
    int keys = 0;
    bool modifier = false;
    for (std::map<int, int>::const_iterator it = sortedList1.cbegin(); 
        it != sortedList1.cend(); it++)
    {
        if (it->second > 90) modifier = true;
        if (it->first - time > 200 || modifier || keys > 1000)
        {
            keys = keys * 1000 + it->second;
            time = it->first;
        }
    }
    return keys;
}
于 2013-04-23T08:15:09.490 に答える