比方說,我想擁有一個具有不同價格的蘋果容器。 我希望他們總是按照他們的價格排序(最高價格第一),但我也想通過他們的ID快速找回他們。我至今是以下我應該使用哪個容器
struct AppleClass
{
string id;
int price;
bool operator<(const AppleClass& o) const
{
return price > o.price;
}
};
int main()
{
set<AppleClass> myapples;
myapples.insert({"apple1", 500});
myapples.insert({"apple2", 600});
myapples.insert({"apple3", 400});
for (auto& apple : myapples)
{
cout << apple.id << "," << apple.price << endl;
}
}
我的應用程序將花費20%的是時間刪除條目,20%的插入項,25%的檢索它們(檢索整個列表),以及35 %更新它們(價格會增加或減少)。
容器最多有450個條目。
我的代碼只解決排序問題。查找是無用的,因爲我想通過他們的ID找到(所以我需要遍歷所有這些)。由於同樣的原因,刪除和插入操作會很慢。
這感覺就像是錯誤的選擇。
但是,如果我有地圖,那麼它將根據ID進行排序。每次檢索列表時,我都必須將其複製到某個容器中,然後將其排序,然後將其發送給用戶,這也感覺很慢。
幫助!
要解決這個問題需要多一點堆棧溢出問題的可接受性。如果您已經編寫了代碼來嘗試解決您的問題,並且它不能正常工作,那麼這裏就是主題。如果你的問題是「我怎麼開始使用它?」不是。 – mah
@mah因此,根據你,如果我的代碼工作,但速度慢,那麼我不應該問在stackoverflow哪個其他容器會解決它?因爲我不知道? – James
你還沒有真正提供足夠的信息。爲什麼以不同方式檢索甚至是重要的?然而,一個簡單的方法是使用'std :: vector',並保留兩個副本 - 一個按價格排序,另一個按ID排序。此外,而不是'id'是'const char *',使用'std :: string'。這允許將id設置爲運行時間(例如基於用戶輸入),而不是要求字符串文字。 – Peter