我有四个静态向量。在我的.cpp文件中(不是我的.h文件!)我将这些向量定义为:
std::vector<Object*> ClassA::vecA;
std::vector<Object*> ClassA::vecB;
std::vector<Object*> ClassA::vecC;
std::vector<Object*> ClassA::vecD;
然后我用一些Object类型的对象填充这些向量中的每一个。
接下来我创建一个地图:
std::map<std::string, std::vector<Object*> > cntr;
我使用上面的向量填充此地图,并使用字符串作为每个向量的键。
问题是,如何访问地图中的向量以找出它们包含的元素数量。我试过了:
for (it = Cntr.begin(); it != Cntr.end(); it++)
{
if (it->first != token)
{
std::cout << it->first << std::endl;
int i = (it->second).size();
std::cout << "SIZE: " << i << std::endl;
}
}
但是我总是给我1的值。正确的方法是什么?
答案 0 :(得分:2)
首先,您需要将迭代器设置为指向地图的有效元素。当你这样做
std::map<std::string, std::vector<Object*>>::iterator Class::it;
int size = it->second.size();
it
并未指向任何内容,因此使用它是未定义的行为。你可以做的是使用
std::map<std::string, std::vector<Object*>>::iterator Class::it;
it = cntr.begin();
int size = it->second.size();
现在可以为您提供地图中第一个矢量的大小。
如果你想获得所有尺寸,那么你需要遍历地图。你可以使用一个很好的基于范围的循环来完成这个
for (const auto & elem : cntr) // get a const reference to each pair
std::cout << elem.second.size();
答案 1 :(得分:0)
如果你有C ++ 11,NathanOliver的答案应该有效。如果不这样做,可以尝试使用typedef来清除代码:
typedef std::vector<Object*> MypObjVec;
typedef std::map<std::string, MypObjVec> MyMap;
MyMap::iterator Class::it = cntr.begin();
const MyMap::iterator Class::it_end = cntr.end();
for(; it!=it_end ; ++it)
{
std::cout<< it->second.size() << std::endl;
}