我在一个程序中使用 c++ STL Map 和 Vector 类,其中我有一个将向量作为指向整数的键的映射。通常在地图中搜索值时,如果未找到该值,myMap.find() 将返回 myMap.end()。
当我尝试使用 myVector.reserve(int) 在我的向量中预分配空间(以防止在使用它们时不断调整大小)时,我的麻烦就来了。出于某种原因,当我搜索的向量已分配空间时,在我的地图中搜索我知道不存在的向量将不会返回 myMap.end(),无论我是否实际填充了向量(示例 1)。
但是,当矢量不在地图中时,只需将对象插入到我希望搜索的矢量中即可获得正确的 myMap.end() 位置(示例 2)。
示例 1:
#include <map>
#include <vector>
#include <iostream>
using namespace std;
int main(){
vector<int> v, v1;
v.reserve(1);
v1.reserve(1);
v[0] = 1;
v1[0] = 2;
map<vector <int>, int> m;
m.insert(make_pair(v, 0));
cout << int(m.find(v1) == m.end());
}
返回 0
示例 2:
#include <map>
#include <vector>
#include <iostream>
using namespace std;
int main(){
vector<int> v, v1;
v.reserve(1);
v[0] = 1;
v1.push_back(5);
map<vector <int>, int> m;
m.insert(make_pair(v, 0));
cout << int(m.find(v1) == m.end());
}
返回 1
我希望能够在我的向量中保留一定量的空间,但似乎使地图如图所示工作的唯一方法是动态插入元素并动态调整向量的大小。这个对吗?有什么解决方法吗?aberrant
任何人都可以为这种(明显的)行为提供解释吗?