C ++创建集合矩阵

时间:2015-12-03 16:58:18

标签: c++ matrix set

我正在尝试用C ++创建一个集合矩阵,但是我得到一个错误,即没有匹配的函数可以调用。这是我的代码:

supermercat.hh

#ifndef SUPERMERCAT_HH
#define SUPERMERCAT_HH

#include <vector>
#include <iostream>
#include <set>
#include "producte.hh"
using namespace std;

class supermercat
{
    private:

    vector <vector <set <producte> > > estructura;

    public:

    // Constructores

    supermercat();

    //Modificadores

    void crear_estructura(int col, int fil);

    void repostar_estanteries(producte prod, string lloc);

supermercat.cc

#include "supermercat.hh"

supermercat::supermercat() {}

void supermercat::crear_estructura(int col, int fil)
{
  vector <vector <set <producte> > > estructura(col, vector<producte>(fil));
}

void supermercat::repostar_estanteries(producte prod, string lloc)
{
  estructura[lloc[0] - 'A'][lloc[1] - 1].insert(prod);
}

有谁知道我做错了什么?我只是想不出来。 我过去曾尝试将其作为矢量矩阵,但是对矩阵中的每个矢量进行排序都很烦人(因为我需要'产品'按字母顺序排序)。

2 个答案:

答案 0 :(得分:1)

我认为问题在于你的crear_estructura方法实现。在基类(supermercat)中,您拥有私有成员:

vector <vector <set <producte> > > estructura;

在实现部分中,您尝试执行以下操作:

vector <vector <set <producte> > > estructura(col, vector<producte>(fil));

并且它没有在别处定义(对我来说,这一行是一个声明,它没有实现任何东西)。

另外,输入:

vector<producte>(fil)

在之前的定义中相当奇怪。您的意思是使用方括号,即[]而不是()吗?例如。 vector<producte> prods[fill]

由于你的解决方案有些棘手,我建议稍微简化一下。快速解决方案是创建一个新的类estructura(适当填写):

class estructura
{
    private:
        vector <vector <set <producte> > > _mestruct;
    public:
        estructura(int col, vector<producte> fil);
        ~estructura();
}

然后实现构造函数以满足您的要求。之后,在supermercat类中使用它,如下所示:

class supermercat
{
    private:
        estructura structdata;
    public:
        ... (like before)
}

你的supermercat构造函数实现应该是这样的:

void supermercat::crear_estructura(int col, vector<producte> fil)
{
    estructura(col, fil);
}

我希望这会帮助你解决问题。

答案 1 :(得分:0)

你遇到的问题是向量初始化,你应该使用resize()调整第一个维度的大小,然后调整每个项目的大小以调整向量的另一个维度,这里有一个简单的例子:

#include <iostream>
#include <vector>
#include <set>

std::vector< std::vector< std::set<int> > > test;

int main()
{
    test.resize(100);

    // if not c++11 replace with for (i = 0; i < 100; ++i) test[i].resize(100)
    for (auto &a: test) 
        a.resize(100);

    test[20][20].insert(1);
    test[30][30].insert(1);
    test[30][30].insert(2);

    std::cout << "(20,20): " << *test[20][20].begin() << std::endl;
    std::cout << "(30,30): size " << test[30][30].size() << std::endl;
}

在“create_estructura”方法中使用此语法应该类似于:

void supermercat::crear_estructura(int col, int fil)
{
    estructura.resize(col);
    for (auto &a: estructura) a.resize(fil);
}

“estructura”中的每个项目都包含一个空集。

相关问题