C++ 如何计算存储在地图中的向量中的元素数

C++ 如何计算存储在地图中的向量中的元素数,c++,C++,我有四个静态向量。在我的.cpp文件(不是我的.h文件!)中,我将这些向量定义为: std::vector<Object*> ClassA::vecA; std::vector<Object*> ClassA::vecB; std::vector<Object*> ClassA::vecC; std::vector<Object*> ClassA::vecD; std::vector ClassA::vec

我有四个静态向量。在我的.cpp文件(不是我的.h文件!)中,我将这些向量定义为:

     std::vector<Object*> ClassA::vecA;
     std::vector<Object*> ClassA::vecB;
     std::vector<Object*> ClassA::vecC;
     std::vector<Object*> ClassA::vecD;
std::vector ClassA::vecA;
std::vector ClassA::vecB;
std::vector ClassA::vecC;
std::vector ClassA::vecD;
然后我用一系列Object类型的对象填充每个向量

接下来,我创建一张地图:

     std::map<std::string, std::vector<Object*> > cntr;
std::map-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;

        }
    }
for(it=Cntr.begin();it!=Cntr.end();it++)
{
if(it->first!=令牌)
{
std::cout first second).size();

首先,您需要将迭代器设置为指向映射的有效元素

std::map<std::string, std::vector<Object*>>::iterator Class::it;
int size = it->second.size();
现在可以得到地图中第一个向量的大小

如果你想得到所有的尺寸,那么你需要遍历地图。你可以用一个很好的基于范围的for循环来实现这一点

for (const auto & elem : cntr) // get a const reference to each pair
    std::cout << elem.second.size();
for(const auto&elem:cntr)//获取每对的const引用

如果你有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;
}
typedef std::vector MypObjVec;
typedef std::map MyMap;
MyMap::iterator类::it=cntr.begin();
常量MyMap::迭代器类::it_end=cntr.end();
for(;it!=it_end;++it)
{

std::coutsecond.size()我应该提到这是在for循环中执行的:@MagnusHimmler,那么您需要在问题中提供一个。代码看起来很好(除了循环中的
Cntr
应改为
Cntr
,而
int i
应改为
size\t i
,甚至
std::vector::size\u type
),但无论如何,您都没有显示如何填充向量或映射。
size()
不说谎。如果它返回1,那么向量中实际上只有1个元素。
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;
}