2017-04-08 71 views
0

我的任務是重載[]操作和使用girl[index] = partner寫的東西變成一對向量:訪問對向量返回用iterator

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情境中的對 - 向量?或者我想重新發明一個輪子?

回答

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,使新的元素在年底,他們相等的範​​圍,也see here添加。)

總之,這需要被固定在你的代碼的東西:

  • 返回類型
  • 迭代器是從所述矢量,而不是從對
  • 插入是有條件
  • 記住的插入的結果
  • 您拼錯了您的使用案例,應該說是Dancers girl;
  • 您可能拼錯了超線段成員定義;它應該說string & Dancers::operator[](int i) ...(或者直接定義它)。
+0

通過這些編輯,我的簡單的int比較器將無法工作,所以如何修復比較器? –