删除std :: set <vector <string>&gt; :: iterator索引处的值

时间:2015-07-30 05:35:39

标签: c++11 vector stl set

更新 - 此问题可能相关(Use iterator to call the non-static function in STL Set

我正在创建一个程序来扫描和解析文本文件,创建数据库,并根据方案和事实评估查询。我的数据结构如下:

Relation
    Scheme
    set<Tuple>

SchemeTuple继承自std::vector<std::string>的位置。 Scheme和每个Tuple应该具有相同数量的元素,并且我反复需要删除所有三个中某个索引处的值。例如,如果我有:

Scheme
    C D H
Tuples
    EE200 F 10AM
    EE200 M 10AM
    EE200 W 1PM

组织如此:

  C='EE200' D='F' H='10AM'
  C='EE200' D='M' H='10AM'
  C='EE200' D='W' H='1PM'

在每个向量的索引0处删除后,我应该:

  D='F' H='10AM'
  D='M' H='10AM'
  D='W' H='1PM'

我已经用this code编写了一个示例来解决问题的本地化问题。我首先擦除Scheme中的索引(实际上是字符串向量),然后遍历集合中的每个Tuple并尝试删除索引处的值。在我的示例中,我创建了类,而只使用了std::stringstd::vector<std::string>。问题出在这里:

    for(set<vector<string>>::iterator t = tempTuples.begin(); t != tempTuples.end(); ++t)
    {
        // how do I erase the element at t?  
    }

tempTuplesTuple个对象的集合(这里只是字符串的向量)。 (*t).erase((*t).begin())在此时插入时会出错(no matching member function for call to 'erase')。如何删除索引处的值?

1 个答案:

答案 0 :(得分:2)

如果您查看错误,可以看到问题是您有const_iterator。这是因为set会自动返回const迭代器,如this question中所述。