c++ - 按类属性(例如名称)搜索类对象的 std::vector

标签 c++ vector c++03

性能/安全检查是否有任何差异 vector 元素使用

  1. for 循环与迭代器

对比

  1. std:find_if(...)?

<强>1。 for循环

// 1. for loop  
for (llvm::SmallVectorImpl<myClass>::const_iterator it = v.begin();
     it != v.end();
     ++it) {
    if (it->getName() == Name) {
        // found element
        // do smth...
        break;
    }
}

对比

<强>2。 std:find_if

// 2. find if
llvm::SmallVectorImpl<myClass>::const_iterator it
    = std::find_if(v.begin(),
                   v.end(),
                   StringCheck<llvm::StringRef>(Name));
if (it != v.end()) {
    // found element
    // do smth...
}

// StringCheck defined in header...

template <class T>
struct StringCheck{
    StringCheck(const T &s) : s_(s) {}
    bool operator()(const myClass &obj) const
    {
        return obj.getName() == s_;
    }
private:
    const T &s_;
};

最佳答案

您的 for 循环在找到匹配项后继续迭代。如果可以进行多个匹配并且您想为每个匹配运行代码,这可能是一件好事;如果您想在找到匹配后停止并且在大型容器中尽早找到匹配,这可能是一件坏事。

关于c++ - 按类属性(例如名称)搜索类对象的 std::vector,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38831192/

相关文章:

c++ - C++ Map中如何使用自定义结构

c++ - Signed Char 到 Unsigned Int 转换的标准 C++ 行为

c++ - "Shell Namespace"新建文件夹的方法是什么?

c++ - "variable|variable"在 C++ 中是什么意思?

r - 曲线错误(): 'expr' did not evaluate to an object of length 'n'

c++ - 通过计算或转换在 C++ 中来回转换 2 的值的补码?

c++ - 一个线程写入变量,另一个线程读取该变量,我如何(C++11 之前)保护该变量?

c++ - 类型转换具有较大尺寸结构的缓冲区

c++ - 从 C++ 字符串中删除不允许的字符的最优雅、最有效的方法?

c++ - 不同对象的 vector 及其迭代器