2016-03-07 20 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 - 只需为您的设置定义一个自定义比较器。 –