【问题标题】:C++ STL associative containers: Get iterator from element?C++ STL 关联容器:从元素获取迭代器?
【发布时间】:2015-06-06 00:14:50
【问题描述】:

这是asked for vectors。但这对于 Sets & Co 也有可能吗?

【问题讨论】:

  • 不,至少不适用于任意容器。查找迭代器特征和概念。
  • 什么是 & co 封面?基本没有
  • 集,多集,地图,多图。 Check this
  • 如果你清楚地知道你有什么,可能会更容易理解这个问题。例如。 std::set<string> 和 "banana".

标签: c++ dictionary iterator set


【解决方案1】:

设置有返回迭代器的查找函数

const_iterator find (const value_type& val) const;
iterator       find (const value_type& val);

eg:
  std::set<int> s;
  std::set<int>::iterator it;

  it = s.find(v);

【讨论】:

    【解决方案2】:

    关联容器几乎设计是为了找到给定元素的迭代器。所以只需使用容器的find 函数。注意它不是常数时间,它会有容器查找的时间复杂度(有序容器的对数,无序容器的平均常数):

    auto iteratorToElement = container.find(element);
    

    如果您需要能够在恒定时间内执行此操作,您可能希望改用 Boost.MultiIndex,它具有 functionality。

    【讨论】:

      【解决方案3】:
      c.equal_range(elem);
      

      类似集合,或

      c.equal_range(elem.first);
      

      对于地图类型的容器,将返回一对(在容器规则下)与元素等效的迭代器。这需要 O(k) 到 O(lg n) 时间,其中 n 是容器中的元素数,k 是伪等价于 elem/elem.first 的元素数(伪,作为哈希冲突模桶计数也计数)。平均值是常数(对于无序)/lg n(对于有序)。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2010-11-26
        • 1970-01-01
        • 2011-03-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-04-16
        • 1970-01-01
        相关资源
        最近更新 更多