Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/161.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/fsharp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何以表格格式打印数据?_C++_Performance_Format - Fatal编程技术网

C++ 如何以表格格式打印数据?

C++ 如何以表格格式打印数据?,c++,performance,format,C++,Performance,Format,我有一个数据结构 map <const char*, vector<double> > m; Key values AA 1 2 3 1 2 1 2 3 BB 2 3 4 1 2 3 4 5 CC 2 3 4 1 2 3 4 5 我如何以有效的方式实现这一点?迭代映射和复制向量非常耗时 关于我的想法 警告:未测试 using namespace std; map <const char*, vector<

我有一个数据结构

  map <const char*, vector<double> > m;

  Key   values 
  AA     1 2 3 1 2 1 2 3
  BB     2 3 4 1 2 3 4 5 
  CC     2 3 4 1 2 3 4 5
我如何以有效的方式实现这一点?迭代映射和复制向量非常耗时

关于我的想法

警告:未测试

using namespace std;
map <const char*, vector<double> > m;

vector<double>::size_type int index = -1;
map <const char*, vector<double> >::size_type finishedVectors = 0;
while(1)
{
    for(map <const char*, vector<double> >::iterator it = m.begin(); it != m.end(); ++it)
    {
        if(index == -1)
        {
            std::cout << it->first << "\t";
        }
        else
        {
            if(index < it->second.size())
            {
                std::cout << it->second[i] << "\t";
            }
            else
            {
                ++finishedVectors;
            }
        }
    }
    if(finishedVectors == m.size())
    {
        break;
    }
    ++index;
}
使用名称空间std;
地图m;
向量::size_type int index=-1;
map::size_type finishedevectors=0;
而(1)
{
for(map::iterator it=m.begin();it!=m.end();++it)
{
如果(索引==-1)
{
std::cout first second.size())
{

std::cout second[i]思想是迭代第一轮以打印映射键,然后遍历每个向量并逐个打印出元素(如果有)

void func()
{
  std::map<std::string, std::vector<int> > m;  

  m["AA"] = {1, 2, 3, 1, 2, 1, 2, 3};
  m["BB"] = {2, 3, 4, 1, 2, 3, 4, 5, 5 };  
  m["CC"] = {2, 3, 4, 1, 2, 3, 4, 5};

  size_t size = 0;
  for (auto item = m.begin(); item != m.end(); ++item)
  {
    std::cout << item->first << '\t';
    if (size < item->second.size())
    {
      size = item->second.size();
    }
  }

  std::cout << std::endl;

  for (size_t i = 0; i< size; i++)
  {
    for (auto item = m.begin(); item != m.end(); ++item)
    {
      if (i < item->second.size())
      {
        std::cout << item->second.at(i) << '\t';
      }
    }
    std::cout << std::endl;
  }
}
void func()
{
std::map m;
m[“AA”]={1,2,3,1,2,1,2,3};
m[“BB”]={2,3,4,1,2,3,4,5,5};
m[“CC”]={2,3,4,1,2,3,4,5};
大小\u t大小=0;
对于(自动项=m.begin();项!=m.end();++项)
{
std::cout first second.size())
{
size=item->second.size();
}
}
std::cout second.size())
{

std::cout second.at(i)在上面的代码中,迭代是两次的。我有超过1万亿条记录。这会降低效率。不,第一次只使用迭代器键。第二次迭代器第二个容器的每个元素。在我的情况下,键也是数十亿。有没有办法迭代一次?它确实迭代一次,at()函数是这里的关键。@billz,所有向量长度相等所有向量长度相等吗?是的,所有向量长度相等。
void func()
{
  std::map<std::string, std::vector<int> > m;  

  m["AA"] = {1, 2, 3, 1, 2, 1, 2, 3};
  m["BB"] = {2, 3, 4, 1, 2, 3, 4, 5, 5 };  
  m["CC"] = {2, 3, 4, 1, 2, 3, 4, 5};

  size_t size = 0;
  for (auto item = m.begin(); item != m.end(); ++item)
  {
    std::cout << item->first << '\t';
    if (size < item->second.size())
    {
      size = item->second.size();
    }
  }

  std::cout << std::endl;

  for (size_t i = 0; i< size; i++)
  {
    for (auto item = m.begin(); item != m.end(); ++item)
    {
      if (i < item->second.size())
      {
        std::cout << item->second.at(i) << '\t';
      }
    }
    std::cout << std::endl;
  }
}
for (size_t i = 0; i< size; i++)
  {
    for (auto item = m.begin(); item != m.end(); ++item)
    { 
        std::cout << item->second[i] << '\t'; 
    }
    std::cout << std::endl;
  }