2013-01-05 92 views
0

全部,std :: map是一個很好的解決方案嗎?

我有以下任務。

我有有限數量的字符串(類別)。然後在每個類別中都會有一組團隊和值對。基於用戶選擇,團隊的數量是有限的。

兩種尺寸不超過25

現在值將改變基於用戶輸入,當它改變球隊應該根據價值進行排序。

我希望STL有某種自動排序的向量或列表容器,但我唯一能找到的是std :: map <>。

所以我想我需要的是:

struct Foo 
{ 
    std::string team; 
    double value; 
    operator<(); 
}; 

std::map<std::string,std::vector<Foo>> myContainer; 

並調用的std ::排序()當值會發生變化。

還是有更有效的方法來做到這一點?

[編輯] 我想我需要澄清我的意思。 這樣想一想。

你有一張桌子。這張表的行是團隊。此表的列是類別。這張桌子的細胞分成兩半。上半部分是給定團隊的類別值。每個玩家的這個價值都在增加。 現在,當玩家被添加到一個團隊時,玩家的得分類別將被添加到一個團隊中,並且列中的數據將被排序。因此,對於「A」類,它可能是team1,team2;而對於「B」類,它可能是team2,team1。 然後根據每個球隊的位置將得分分配給每個球隊/類別。 而我將需要顯示該分數。

我希望這會澄清我想要達到的目標,並且更清楚我所尋找的是什麼。

+3

*「然後在每個類別中都會有一個團隊和價值。」* - 這讓我感到困惑。在這句話中,你似乎在說每個字符串都應該與單個團隊/值對(我從關鍵詞「a」,單數形式的團隊和「價值」中得出)相關聯。但在你使用地圖的例子中,你似乎將字符串與* multiple * team/value對('std :: vector ')關聯。請澄清(在問題中)。 –

+0

*「現在價值會根據用戶輸入而改變,當它改變時,團隊應該根據價值進行排序。」* - 團隊?形成'Foo'看起來像一個'團隊'只有**一個**值,所以排序它將是相當微不足道的。另外,你的'myContainer'就像你可以得到的通用名。我們不知道這是否是類別的頂級集合,如果它僅代表*一類*類別,請用算法和類型信息的必要細節澄清這個問題。 – WhozCraig

+0

@BenjaminLindley,英語不是我的一種語言,但我試圖澄清這一點,盡我所能。應該按照例子設置一切。 – Igor

回答

1

這實際上取決於你多久修改一次地圖中的數據,以及你多久纔會去搜索std :: string並獲取向量。

如果您的訪問模式是添加地圖條目,然後填充矢量中的所有條目,然後訪問下一個,填充矢量中的所有條目等,然後隨機訪問該矢量地圖然後..沒有地圖可能不是最好的容器。你最好使用一個包含標準字符串和矢量對的矢量,然後在添加完所有內容後對其進行排序。

事實上,如上所述組織它可能是最有效的方法(但我承認這並不總是可行的)。此外,強烈建議使用某種散列值代替std :: string,因爲散列比較比字符串比較快許多倍。無論如何,你也有存儲在Foo中的字符串。

但是,地圖會起作用,但它確實取決於您正在嘗試做什麼。

+0

這是一個基本的投影算法。對於「ABC」類別,我將我的值從高到低排序。具有最高價值的團隊獲得1分,其次是2分等等。當用戶更改數據時,所選團隊的值將會增加,然後執行求和,然後進行評分分配。但對於類別「DEF」,排序應該從最低到最高。所以你可以看到我需要保留的類別。 – Igor

相關問題