c++ - STL set::find 重新定义搜索

标签 c++ iterator find set std-pair

我的程序基于一组对,即

typedef std::pair<int,int> innerPair;
typedef std::pair<innerPair,int> setElement;
std::set<setElement> Foo;

innerPair 元素是真正定义 setElement 的元素,但我需要将组 ID 附加到每个元素,因此是后者的 setElement 定义。

在程序的其余部分,我需要找到 innerPair 而不管它们的组 ID,所以我基本上需要一个函数

std::set<setElement>::iterator find(innePair);

不管组 ID 是什么,它都会找到 innerPair。就目前而言,我可以简单地循环遍历所有可用的组 ID 并进行多次 find() 调用,但这远非高效。

是否有一种简洁的方法来定义执行某种通配符 搜索的find( ... ) 成员函数,或者我是否需要用我的代码重载它自己的定义?

最佳答案

如果您有多个具有相同内部对和不同组 ID 的元素,您可以使用 std::multimap<innerPair, int> .

这允许您使用相同的 innerPair 存储多个元素.

它还简化了使用 lower_bound/upper_bound 的搜索或 equal_range .

关于c++ - STL set::find 重新定义搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13555791/

相关文章:

C++ wxWidgets - 没有宽度的 ScrolledWindow 的问题

c++ - 如何在 lambda 捕获列表中创建指针?

c++ - 当一个字符串是 ""或一个 vector 没有元素时, `begin()` 等于 `end()` 吗?

javascript - Redux Saga - 产量生成 takeEvery 调用无过载

bash - 在多个目录中查找批处理文件

shell - 使用 find 和 sed 将文件名添加到文件开头

linux - 在 Linux 上,如果没有选项 -d,带有 LS 的 FIND 命令不会显示正确的结果

c++ - 将库添加到项目中

c++ - 为什么函数在声明为 int 时返回 boolean?

c++ - 将 std::list 扩展为循环列表