1

我是 C++ 的初学者。在我使用 C# 之前。Bellow 是一个 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;
}
4

3 回答 3

3

您似乎做错了事情,因为通常使用键对事物进行排序,并且使用键而不是使用值来完成查询。但是,这里似乎对std::map<int,int>您有所帮助。只需将您的值用作地图的键,并将您的键用作值(以便您可以使用该值进行查询)。如果允许重复,请使用 multimap。

于 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 回答