2016-03-07 54 views
0

我有一套。它的形式是set<pair<string,int> > stockSet 我想找到如果上面的集合有一個給定字符串的條目是第一個元素。 同樣要找到該對的第二部分的值,即int給出該對的第一個元素,即string如何訪問在C++中設置的對的元素

我知道如何做到這一點與地圖和單個元素集。但我無法弄清楚如何做到這一點,需要語法幫助。

回答

0

你不能弄明白,因爲你不能這樣做。

集合中的元素是「完整」元素。僅僅因爲你在那裏看到一個std :: pair,並且你認爲這個集合包含兩個元素,並不意味着它是。該集合包含一個std::pair,一個單一的完整元素。

如果您有另一個std::pair,在某個地方,您可以搜索該設備以查看該設備是否存在等效配對。但是,如果你只有該集合包含的一半對象,那麼你真的不能這樣做。

我在這裏看到的唯一選項是:

  • 遍歷集手動,直到你做什麼或沒有找到您要查找的內容。

  • 如果有一個最低int價值,你想到會在那裏,你可以使用lower_bound(),傳遞std::pair與最小值爲int部分,而你的字符串搜索,看看有什麼lower_bound()扒。

  • 或許您會重新考慮您決定使用std::set作爲您使用的任何目的。也許std::set,包含std::pair,不是真正適合您需求的容器。

+0

好的,我想我最好使用地圖。但我需要一個其他的幫助。如果我創建一個元素作爲pair的集合,並且我希望它根據第一個值進行排序。我怎樣才能做到這一點?我的意思是如何指定排序必須基於第一個元素完成,因爲默認設置是排序的。 –

+0

@VasaviManasa - 只需爲您的設置定義一個自定義比較器。 –