【问题标题】:iterator of a set inside a set is equal to the insider set.begin()?一个集合内的一个集合的迭代器等于内幕 set.begin()?
【发布时间】:2018-04-08 00:08:33
【问题描述】:

例如:

set<set<T>> outer_set;
set<T> insider_set1, insider_set2;
T a;
insider_set1.insert(a);
outer_set.insert(insider_set1);
outer_set.insert(insider_set2);
set<T>::iterator chosen_itr;
for(auto temp_set: outer_set){
    if(temp_set.count(a)){
        chosen_itr = temp_set.begin();
        break;
    }
}
T b = something(...);
*chosen_itr.insert(b);

此代码是否会将 b 添加到 outer_set 内部的 insider_set1 或 selected_itr 属于在 自动温度设置

如果 selected_itr 是一些随机迭代器,如何获得真正的迭代器??

【问题讨论】:

    标签: c++11 stl set


    【解决方案1】:

    正如您在问题中指出的那样,您将指针(迭代器)保留在临时文件中。您应该使用参考:

    for(auto& temp_set: outer_set){
    

    那么给定的代码将是有效的,再做一个简单的改变:

    chosen_itr->insert(b);
    

    【讨论】:

    • 由于使用了模板,我还必须在 set::iterator 之前添加 typename,但是 selected_itr->insert(b);不工作我错过了什么。
    • chosen_itr = temp_set.begin();实际上指向 insider_set1 中的第一个元素,而不是集合本身我无法访问我所要求的集合?
    【解决方案2】:

    1. > set里面的一个set的迭代器等于inside set.begin()?

    不,insider_set1.begin() 将指向 insider_set 中的第一个元素

    要获得一个迭代器(指针)指向它自己的集合,我试图避免使用 for(auto set1: outsider_sit) 代替,这是使用

     for(auto itr = outsider_set.begin(); ire != outsider_set.end(); ++itr)
    

    然后将itr值保存在所选集合中。

    2。这行得通吗?

    不是集合的itr迭代器>是一个常量的迭代器,集合在c++中是不可变的,并且集合内的值在添加后不能更改,即使这些值是容器。

    3。如何将 b 添加到 outsider_set 内的集合中??

    感觉我们无法更改集合内的值,我们必须删除旧值(insider_set)并在更新后插入新值(insider_set),如下所示:

     set<set<T>> outer_set;
     set<T> insider_set1, insider_set2;
     T a;
     insider_set1.insert(a);
     outer_set.insert(insider_set1);
     outer_set.insert(insider_set2);
     set<T> chosen_set;
     set<T>::iterator chosen_itr; // not needed now
     for(auto temp_set: outer_set){
         if(temp_set.count(a)){
             //chosen_itr = temp_set.begin(); // not working 
             chosen_set = temp_set;
             break;
         }
     }
     T b = something(...);
     outsider_set.erase(chosen_set);
     chosen_set.insert(b)
     outsider_set.insert(chosen_set);
    

    这个解决方案可能效率不高,但我认为是唯一的方法,除了使用 const_cast 插入之外,如果有更好的方法请提及。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-12-25
      • 1970-01-01
      • 2013-05-08
      • 1970-01-01
      • 2010-10-17
      • 2012-07-03
      相关资源
      最近更新 更多