【问题标题】:Insert values in a vector of int sets in C++在 C++ 中的 int 集向量中插入值
【发布时间】:2016-02-20 03:30:22
【问题描述】:

我想将值插入到set<int>vector 中,它是使用typedef 定义的,如下所示:

typedef std::set<int> blockSet_t;
std::vector<blockSet_t>* myvector

我希望有这样的值:myvector[0] 具有 ints 的 setmyvector[1] 具有不同的 set ints 等等。

目前,我将这个 vector 传递给一个函数,该函数正在解析一个具有整数 set 的文件。

喜欢:

main()
{
 std::vector<blockSet_t> myvector;
 filereader(myvector);
}

我从文件中读取了set,并将其存储在不同的blockSet_t myset;

我正在使用以下循环将此set 存储到vector 中的特定位置:

filereader(&myvector)
{
 for(int i=0;i<size;i++)
 {
  myvector.push_back(myset); // It does not give error but I don't know myset is stored in which location
//what I want is to have someting like this

  myvector[i].push_back(myset); //so I can store different sets at different locations
 }
}

我也想不通,如何显示vector中的值。

由于它是sets 的向量,我想显示每个set(在不同的vector 索引上)。

非常感谢这方面的任何帮助。

谢谢。

【问题讨论】:

  • 有点不清楚你在问什么。给定一个集合,您想将该集合推入集合向量吗?您还希望能够遍历同一个向量并打印每个集合中的每个元素?这是你的问题吗?
  • 那为什么要使用vector呢?为什么不使用sets 的动态数组?

标签: c++ vector set stdset


【解决方案1】:

首先,push_back 函数之所以称为push_back,是因为它将对象推回。

这意味着,如果您的vector 为空并且您调用push_back,您推送的对象将具有0 位置。

如果你的vector 里面有n 对象,这意味着在push_back 之后你推送的对象将有n-th 索引。

myvector.push_back(myset);
std::cout<<"index of myset is "<<myvector.size()-1<<std::endl;

其次,如果要打印值,则必须为std::ostream 类创建自己的operator&lt;&lt; 重载函数。这是在 C++ 中打印值的常用方法。

假设您要打印set 卷曲{} 括号和方形[] 向量:

#include <ostream>

inline std::ostream& operator<<(std::ostream &os,const blockSet_t &mySet)
{
    os<<"{ ";
    for(const auto &value:mySet)
    {
        os<<value<<' ';
    }
    os<<"};
    return os;
}

inline std::ostream& operator<<(std::ostream &os,const std::vector<blockSet_t> &myvector)
{
    os<<"[ ";
    for(const auto &mySet:myvector)
    {
        os<<mySet<<' ';
    }
    os<<"];
    return os;
}

接下来,你必须像这样cout你的对象:

#include <ostream>

main()
{
    std::vector<blockSet_t> myvector;
    filereader(myvector);
    std::cout<<myvector<<std::endl;
}

【讨论】:

  • 谢谢,所以当我 push_back myvector.push_back(myset1) 时,如果我的向量为空,则 myse1t 会转到 0 位置。当我再次执行 myvector.push_back(myset2) 时,它会转到 1 个位置,对吗?现在,当我使用类似的东西显示每个集合的大小时,for(int i=0;i
    @SyedAftabRashid 给我你的代码。或使用Skype fnc1234联系我,我们会解决您的问题
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-21
  • 1970-01-01
  • 2011-06-18
  • 2015-10-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多