避免使用集合和向量中的迭代器

时间:2016-06-26 20:21:32

标签: c++ vector set

我有以下一套:

        auto comp = [](const vector<int>& a, const vector<int>& b) -> bool
    { return a.size() < b.size(); };
    auto path = std::set <vector<int>, decltype(comp)> (comp);

当我尝试从设置任务中获取第一个元素时

tasks.begin() this will return an iterator of the set

当我再次尝试访问集合的向量时:

tasks.begin()->begin() this will only return an iterator of the vector.

如何在中间没有任何迭代器的情况下获取集合的第一个元素?

2 个答案:

答案 0 :(得分:1)

你做不到。访问std::set中元素的唯一方法是通过以下方法:begin,end,cbegin,cend,rbegin,rend,crbegin,crend,insert,emplace,emplace_hint,erase,find,equal_range,lower_bound和upper_bound 。它们中的每一个都返回一个迭代器,一对迭代器或一对迭代器和一个bool。

答案 1 :(得分:1)

我不确定你要做什么,但这是滥用比较器。以下是requirements on a compare type T

  

类型T满足比较

     
      
  • 类型T满足BinaryPredicate和
  •   
     

鉴于

     
      
  • comp,Compare
  • 类型的对象   
  • equiv(a, b),一个等同于!comp(a, b) && !comp(b, a)
  • 的表达式   

如果您的功能没有检查这两个并且相对于彼此返回的订单,则违反此合同并且结果将是未定义的。