【问题标题】:Iterate through object with no next() defined遍历未定义 next() 的对象
【发布时间】:2016-11-29 16:06:28
【问题描述】:

假设我在(r1,r2] 范围内有对象,我想将其作为键插入到地图中。它们没有定义迭代器/下一个,但有一个小于运算符。我该怎么做:

   template< class K, class V>
   void foo( K r1, K r2, V val ) {
        for(K key = r1; key < r2; ++key ) 
        { 
             mMap.insert(make_pair(key,val)); 
        }
   }

我不能使用++key

K 可以是copyableassignable 的任何类型,有opertor&lt; 但没有equality operatorarithmetic operators

【问题讨论】:

  • std::next 怎么样?
  • 为此我需要密钥 K 的迭代器。
  • A std::map 总是有迭代器。我不确定你在问什么。
  • 没有足够的信息 - 您是否确切地知道所有键 r1-r2 是什么,并且您将它们放在列表中?否则你怎么知道它们的样子?
  • 我已经用例子更新了问题

标签: c++ stdmap


【解决方案1】:

键的可迭代性无关紧要,映射实现了对键集的迭代。在Iterate through a HashMap 中查看相关内容:

Map<String, Object> map = ...;

for (String key : map.keySet()) {
    // ...
}

或更接近Iterate keys in a C++ map:

for(std::map<Key,Val>::iterator iter = myMap.begin(); iter != myMap.end(); ++iter)
{

}

【讨论】:

  • ... 或只是 for (const auto&amp; keyvalue : myMap) { ... keyvalue.first ... keyvalue.second ... }
  • 实际上我想从(r1, r2] 范围内插入键。 for(K key = r1; key ++key。
  • 谢谢,我有点生疏了——而且还没有完全适应新的语法。 @has,您的问题非常不清楚。在您的问题中删除对地图的任何引用,然后询问如何在未定义迭代的情况下迭代一系列对象。
  • @has 如果K 不可迭代,那么谈论K 的范围是没有意义的。您将不得不告诉我们更多关于您的 K 类型的信息。
【解决方案2】:

您可以使用 std::map 类中的迭代器

你可以通过Begin得到它

您可以使用 std::map&lt;type,type&gt;::iterator 类型的迭代器编写一个 for 循环 然后按预期使用所有运算符

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-02-25
    • 2016-05-12
    • 2012-04-20
    • 2017-02-01
    • 2015-06-10
    • 1970-01-01
    • 2021-09-06
    相关资源
    最近更新 更多