我的任务是重载[]
运算符并使用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;
}
所以我设法对女孩进行排序,现在我有了一个女孩,我想指定一个伙伴。根据我的理解,现在是时候返回参考,以便我可以分配合作伙伴。我如何使用迭代器?
更重要的是:是否有更有效的方法将x
和y
分配给a[x] = y
情况下的配对向量?还是我想重新发明轮子?
答案 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)
...(或者只是内联定义)。