假设我有一个 std::vector<std::pair<int, std::vector<int> > >
,即包含成对的整数到 vector 的 vector 。 (我知道我可以用 map 实现同样的目标,但这不是我要的)
我如何使用 STL 搜索 int(一对中的一个)?我写了一个可行的解决方案:
struct FindFirst {
FindFirst(int i) : toFind(i) { }
int toFind;
bool operator()
( const std::pair<int, std::vector<int> > &p ) {
return p.first==toFind;
}
};
可以这样使用:
int valueToFind = 4;
std::find_if(myVec.begin(), myVec.end(), FindFirst(valueToFind));
但在我看来,这有点丑陋;一定会有更好的办法。 那么,是否有更好的方法可以不使用 C++0x 或 Boost 中的任何东西来做到这一点? (因为我正在努力学习最好的方法,而且我强调,只有 STL)
编辑: 看起来我的要求有点困惑。我更感兴趣的是,在仿函数上使用构造函数搜索值是否是一种不好的做法,尤其是当它们用于 STL 算法时。
最佳答案
当只使用 STL 时,这是最好的方法。您到底不喜欢它的什么地方(除了冗长)?
它用途广泛,因为您可以与其他算法一起使用,例如 std::binary_search
。
它非常简单和直接(至少对于习惯了 C++ 仿函数的人来说)。
这里唯一真正需要改进的是数据结构的选择。 std::map
涵盖了此类用例,您还没有解释为什么不能使用它。我知道对于您的实际问题, map 可能真的不适合,但在那种情况下,您的示例并不代表您的实际问题。你应该解决这个问题。
关于c++ - 在仿函数的 c'tor 中搜索值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6910590/