找到一个二维向量的位置,它是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。在答案中查看我的更新代码;我只是简单地用实际型号替换了所有的汽车。它不能完全工作,但经过一些调整,我可以使用它。