我想共享地圖和另一矢量如下面的代碼之間的引用:從另一個 C++地圖,載體,對與參考
int x = 2;
f(x);
template <typename T>
void f(T& x) {
std::map<T, vector<int> > mp;
mp[x] = vector<int>(2, 4);
vector< pair<T&, int> > v1;
for (auto& kv : mp) {
v1.push_back(make_pair(kv.first, 0));
}
}
和調用該函數
但是這不能編譯。
error: no matching function for call to ‘std::vector<std::pair<int&, int>, std::allocator<std::pair<int&, int> > >::push_back(std::pair<int, int>)’
v1.push_back(make_pair(kv.first, 0));
有人明白爲什麼嗎?
編輯 我能夠把事情與
std::reference_wrapper
工作,這是我目前的解決方案。
template <typename T>
void f(T& x) {
std::map<std::reference_wrapper<T>, vector<int> > mp;
mp[x] = vector<int>(2, 4);
vector< pair<T&, int> > v1;
for (auto& kv : mp) {
v1.push_back(make_pair(std::ref(kv.first) , 0));
}
v1[0].first = 34;
}
而且
int x = 2;
f(x);
cout << x << endl;
打印34.人們是否看到任何這方面的利弊VS指針爲基礎的方法?
這是非常可能有一個容器,存儲'對'! –
Danvil
@Danvil真的嗎?參考既不可複製也不可移動;這同樣適用於包含參考的一對。所有標準容器都要求包含的物體可以是可複製的或可移動的。 –
@JamesKanze:看到我的答案。 – Danvil