找到一个二维向量的位置,它是C++类的一个元素

找到一个二维向量的位置,它是C++类的一个元素,c++,c++11,search,multidimensional-array,stdvector,C++,C++11,Search,Multidimensional Array,Stdvector,我正在处理一个类,在该类的一个元素中查找值的位置时遇到一些问题。我对我的类的定义如下: typedef class Chrom { public: vector<vector < int>> bit; vector<vector < bool>> jobisconsidered; vector<ve

我正在处理一个类,在该类的一个元素中查找值的位置时遇到一些问题。我对我的类的定义如下:

typedef class Chrom                                         
{
 public:
    vector<vector < int>> bit;                  
    vector<vector < bool>> jobisconsidered;

    vector<vector <float>> WaitingTime; 
    void variablesresize()
    {
        int i = 0, j, k;
        float a;

        std::vector<float> datapoints;
        std::ifstream myfile("Input.dat", std::ios_base::in);

        i = 0;                   //making zero counter of characters                        
        myfile.open("Input.dat");//now we reread numerical values                       

        while (!myfile.eof())
        {
            myfile >> a;
            //  cout << "i=" << i << '\n';              
            if (!myfile) // not an int                  
            {
                myfile.clear(); // clear error status               
                myfile.ignore(1); // skip one char at input             
            }
            else
            {
                datapoints.push_back(a);
                ++i;
            }
        }

        myfile.close();

        Jobs = datapoints[0];
        Machines = datapoints[1];

        WaitingTime.resize(Machines);
        bit.resize(Machines);

        for (int i = 0; i < Machines - 1; ++i)  WaitingTime[i].resize(Jobs);

        bit[i].resize(Jobs);
        }
    }
} c;

c popcurrent[50];
但我得到以下错误:

 Error  109 error C2893: Failed to specialize function template
'unknown-type std::less<void>::operator ()(_Ty1 &&,_Ty2 &&) const'

我知道一种方法是使用for和if循环。但我想知道是否还有其他更自动化的方法来实现这一点,比如内置函数。

我起初没有注意到这一点-有太多不相关的代码-但问题很简单:您试图找到std::vector类型的第一个元素,而不是int类型的值


popcurrent[0]。bit.begin指向std::vector的第一个元素,即向量。比较int向量和int向量时,没有小于运算符。

一开始我没有注意到-有太多不相关的代码-但问题很简单:您试图找到std::vector类型的第一个元素,而不是小于int类型的值

popcurrent[0]。bit.begin指向std::vector的第一个元素,即向量。对于比较整数向量和整数向量,没有小于运算符

我想找到向量中前3个的位置是0和 popcurrent[0]。位[0][0]=3,我有问题。具体地说,我试过了 C++搜索元素第一次看到的位置向量 命令:

auto p = std::lower_bound(popcurrent[0].bit.begin(), popcurrent[0].bit.end(), 1);
int position = p - popcurrent[0].bit.begin();
auto p=std::lower_bound(popcurrent[0].bit.begin(), popcurrent[0].bit.end(), 1);
int position = p - popcurrent[0].bit.begin();
主要有两个问题:

问题1:首先获取参数,最后获取参数,这些参数是定义偏序范围的前向迭代器类型。在您的案例PopCurrent[0].bit.begin中,您正在传递一个迭代器,该迭代器将指向的元素作为整数向量记住std::vector是一个向量向量数组,而不是std::lower_bound无法找到运算符的任何定义的整数 我想找到向量中前3个的位置是0和 popcurrent[0]。位[0][0]=3,我有问题。具体地说,我试过了 C++搜索元素第一次看到的位置向量 命令:

auto p = std::lower_bound(popcurrent[0].bit.begin(), popcurrent[0].bit.end(), 1);
int position = p - popcurrent[0].bit.begin();
auto p=std::lower_bound(popcurrent[0].bit.begin(), popcurrent[0].bit.end(), 1);
int position = p - popcurrent[0].bit.begin();
主要有两个问题:


问题1:首先获取参数,最后获取参数,这些参数是定义偏序范围的前向迭代器类型。在您的案例中,PopCurrent[0].bit.begin,您正在传递一个迭代器,该迭代器将指向的元素作为整数向量。记住std::vector是一个向量向量数组,而不是std::lower_bound无法找到任何运算符定义的整数。准备MCVE将非常有用-您的示例无法编译。另外,您使用的是哪个版本的Visual Studio?准备MCVE将非常有帮助-您的示例无法编译。另外,您使用的是哪个版本的Visual Studio?感谢@JeJo的全面响应,我在尝试运行代码时遇到了两个错误。对于行auto findPositionconst std::vector&vec3D中的auto,const int&val I see Error不能重载通过返回区分的函数,对于auto I see auto function,则需要尾部返回类型错误。有什么解决方法吗?@questionaskerprogrammer为了编译这个,您需要一个编译器gcc 4.8.1或更高版本。这里的autofindpositionconst std::vector&vec3D,const int&val代替auto,您还可以将实际返回类型写入std::tuple。在答案中查看我的更新代码;我只是用实际的类型替换了所有的auto。虽然它不能完全工作,但经过一些调整,我可以使用它。感谢@JeJo的全面响应,只是我在尝试运行代码时遇到了两个错误。对于行auto findPositionconst std::vector&vec3D中的auto,const int&val I see Error不能重载通过返回区分的函数,对于auto I see auto function,则需要尾部返回类型错误。有什么解决方法吗?@questionaskerprogrammer为了编译这个,您需要一个编译器gcc 4.8.1或更高版本。这里的autofindpositionconst std::vector&vec3D,const int&val代替auto,您还可以将实际返回类型写入std::tuple。在答案中查看我的更新代码;我只是简单地用实际型号替换了所有的汽车。它不能完全工作,但经过一些调整,我可以使用它。