按类属性搜索类对象的std :: vector(例如name)

时间:2016-08-08 13:59:05

标签: c++ vector c++03

性能/安全检查是否存在差异? 使用

的矢量元素
  1. for for loop with iterators
  2. VS。

    1. STD:find_if(...)?
    2. 1。 for loop

      // 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;
          }
      }
      

      VS

      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_;
      };
      

1 个答案:

答案 0 :(得分:0)

找到匹配后,你的for循环继续迭代。如果可能有多个匹配并且你想为每个匹配运行代码,那么这可能是件好事,如果你想在找到匹配后停止并且在大容器中早期找到匹配,则这是一件坏事。