2013-04-23 69 views
1

我是C++初學者。在我使用C#之前。 Bellow是一個C#腳本。我如何在本地C++中完成相同的操作?如何將此C#腳本轉換爲本機C++?

所有我需要的是:

  • 列表,或類似的,具有INT-INT鍵值對的值
  • 可以自動排序。如果不是,它必須是鍵進行排序,並且它可以得到一個 值的指數(我的每一個值是確定的)

我試圖std::map但它不具有內置排序值或獲取密鑰按價值。 C++有類似的東西,如在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; 
} 

回答

3

您似乎在做錯誤的方式,因爲通常情況下使用鍵進行排序並且使用不使用該值的鍵進行查詢。但是,看起來std::map<int,int>會幫助你。只需將您的值用作地圖的關鍵字並將您的關鍵字用作值(以便您可以使用該值進行查詢)。如果允許重複使用,請使用multimap。

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

非常感謝您!如何運作'List_Remove'?因爲似乎地圖沒有內置的價值發現? 'List_Add'中的 – user2310322 2013-04-23 08:21:51

+0

,檢查是否有密鑰存在,不要更改它的值! – Sakura 2013-04-23 08:42:09

+0

如果sortedList1具有pair(1,1000)您的'List_Remove(1000)'查找鍵1000,則找不到值1000。 – user2310322 2013-04-23 14:32:36