сортировка — Как преобразовать этот сценарий C # в родной C ++?

Я новичок в C ++. Прежде чем работать с C #. Ниже представлен скрипт на C #. Как я могу сделать то же самое в родном C ++?

Все что мне нужно это:

  • Список или аналогичный, имеют пару ключ-значение int-int
  • Может автоматически сортировать по значению. Если нет, он должен быть отсортирован по ключу и может получить индекс
    значение (каждое из моих значений является определенным)

Я старался std::map но он не имеет встроенной сортировки по значению или получения ключа по значению. Есть ли в C ++ похожие вещи? sortedlist в с #?

Большое спасибо!

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;
}

1

Решение

Похоже, вы поступаете неправильно, поскольку обычно все сортируется с использованием ключей, а запросы выполняются с использованием ключа, не использующего значение. Тем не менее, кажется, std::map<int,int> поможет вам здесь. Просто используйте ваше значение в качестве ключа карты и ваш ключ в качестве значения (чтобы вы могли выполнять запрос, используя значение). Используйте мультикарту, если дубликаты разрешены.

3

Другие решения

Вот некоторые инструменты конвертера:
Пожалуйста, посетите следующие ссылки:

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;
}
1
По вопросам рекламы [email protected]