2009-12-15 52 views
4

我要找一些STL(但是不能增加)容器,它下面的操作後,將包含2個元素:「ABC」和「XYZ」:要使用哪個STL容器,以便忽略重複的元素?

std::XContainer<string> string_XContainer; 
string_XContainer.push_back("abc"); 
string_XContainer.push_back("abc"); 
string_XContainer.push_back("xyz"); 

順便說一句,我需要它只是爲了最後調用string_XContainer.size()來獲得唯一字符串的總數。所以也許我甚至不需要一個容器,並且有一個更優雅的方法來做到這一點?

回答

18

std::set是你之後的人。根據您定義的某個比較器函數,每個元素最多隻能包含一個實例。

這將是獲取唯一字符串數量的一種方法。在你的例子中,這些字符串已經按照排序順序了?如果是這種情況,那麼你可以創建一個數組(或其他一些簡單的結構)並使用std::unique算法。

+0

是的,set是這個容器。 @Igor Oks,但請注意,插入元素的順序不會保留在集合中,我想這不是必需的。 – Naveen 2009-12-15 08:10:47

+0

它不會保持插入順序,但它將保持嚴格的弱排序。 – 2009-12-15 08:15:59

+0

不要忘記,唯一的唯一操作在排序的範圍。你可以測試一個範圍是否使用'std :: adjacent_find(iBegin,iEnd,std :: greater ())== iEnd'技巧排序,如果不是,則只應用sort。 – 2009-12-15 09:49:28