使用迭代器访问pair-vector返回

时间:2017-04-08 23:30:57

标签: c++ vector iterator operator-overloading

我的任务是重载[]运算符并使用girl[index] = partner将东西写入对向量:

class Dancers {
    unsigned long & operator [] (int i);
    vector<pair<int,string>> m_dancers;
};
unsigned long & operator [] (int i) {
    auto iter = lower_bound(m_dancers.first.begin(), m_dancers.first.end(), i, cmpInt);
    m_dancers.first.insert(iter, i);
    //what now?
}     
int main() {
    Pairs girl;
    girl[0] = "Richard";

    return 0;
}

所以我设法对女孩进行排序,现在我有了一个女孩,我想指定一个伙伴。根据我的理解,现在是时候返回参考,以便我可以分配合作伙伴。我如何使用迭代器?

更重要的是:是否有更有效的方法将xy分配给a[x] = y情况下的配对向量?还是我想重新发明轮子?

1 个答案:

答案 0 :(得分:0)

如果你的地图中已经存在一个关键字(即你想要一个unqiue-key地图,而不是一个多关键地图),大概你想要插入一个新元素。因此,您需要检查密钥并仅有条件地插入。并且您希望返回映射的元素,而不是它们的键。

string & operator[](int key) {
    auto it = lower_bound(m_dancers.begin(), m_dancers.end(), key, cmpInt);

    if (it->first != key)
        it = m_dancers.insert(it, make_pair(i, string()));

    return it->second;
}

如果您想要一个多键映射,那么只需省略条件检查并无条件地进行插入。 (但是,您可能希望使用upper_bound,以便在等等范围的 end 添加新元素,也就是see here。)

总结一下,需要在代码中修复的内容:

  • 返回类型
  • 迭代器来自向量,而不是来自
  • 插入是有条件的
  • 请记住插入的结果
  • 您错误拼写了用例,应该说Dancers girl;
  • 您可能会错误地勾勒出外线会员定义;它应该说string & Dancers::operator[](int i) ...(或者只是内联定义)。