C++ 基于索引不起作用的C+;从向量中删除元素+;Visual Studio
我有一个向量,它接受map对象作为元素,其中Student是一个包含学生组名称和Id的类。 在将地图存储到矢量中之后,现在我想根据索引或地图本身删除地图。这意味着如果我想删除矢量中的地图2,那么它应该删除地图2或第二个元素。我曾使用erase、iterator等删除元素,但使用iterator时出现以下错误: 错误3错误C2678:二进制“==”:未找到接受“const Student”类型左侧操作数的运算符(或没有可接受的转换) 当我使用: coll.erase(coll.begin()+2) 无论我提供什么索引,我只能删除向量的结束/最后一个元素,但不能删除位置2处的贴图 我的节目:C++ 基于索引不起作用的C+;从向量中删除元素+;Visual Studio,c++,c++11,visual-studio-2012,vector,C++,C++11,Visual Studio 2012,Vector,我有一个向量,它接受map对象作为元素,其中Student是一个包含学生组名称和Id的类。 在将地图存储到矢量中之后,现在我想根据索引或地图本身删除地图。这意味着如果我想删除矢量中的地图2,那么它应该删除地图2或第二个元素。我曾使用erase、iterator等删除元素,但使用iterator时出现以下错误: 错误3错误C2678:二进制“==”:未找到接受“const Student”类型左侧操作数的运算符(或没有可接受的转换) 当我使用: coll.erase(coll.begin()+2)
#include <map>
#include <iostream>
#include "student.h"
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
static int i=0,j=1;
vector<map<int,Student>> coll;
typedef std::map<int,Student> Mymap;
Mymap c1;
map<int, Student> mine(int key,Student value)
{
c1.insert(Mymap::value_type( key,value));
return c1;
}
void print(Mymap a)
{
Mymap m2;
coll.push_back(a);
m2 = coll[i];
i++;
Student s1 = m2.at(j);
j++;
}
int main()
{
typedef map<int, Student> map1;
Student s[5];
Student s1;
map1 m1;
s[0].setName("SAI");
s[1].setName("RAVI");
s[2].setName("RAJU");
s[3].setName("HemaChandra");
s[4].setName("Tushar");
s[0].setId(10);
s[1].setId(20);
s[2].setId(30);
s[3].setId(40);
s[4].setId(50);
m1 = mine(1,s[0]);
s1 = m1.at(1);
print(m1);
m1 = mine(2,s[1]);
s1 = m1.at(2);
print(m1);
m1 = mine(3,s[2]);
s1 = m1.at(3);
print(m1);
m1 = mine(4,s[3]);
s1 = m1.at(4);
print(m1);
m1 = mine(5,s[4]);
s1 = m1.at(5);
print(m1);
cout<<endl<<endl;
cout<<"Before Deleting"<<endl;
for(int i=0,j=1;i<coll.size();i++,j++)
{
Mymap m3 = coll[i];
Student st = m3.at(j);
std::cout <<" "<< st.getName()<<std::endl;
}
cout<<"\nAfter Deleting"<<endl;
coll.erase(coll.begin()+2);
// coll.erase(std::remove(coll.begin(), coll.end(), m1), coll.end()); -------Error when using this statement
for(int i=0,j=1;i<coll.size();i++,j++)
{
Mymap m3 = coll[i];
Student st = m3.at(j);
std::cout <<" "<< st.getName()<<std::endl;
}
return 0;
}
#include<iostream>
using namespace std;
class Student
{
public:
string name;
int id;
void setName(string nam);
void setId(int i);
string getName();
int getId();
};
Student.h:
#include <map>
#include <iostream>
#include "student.h"
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
static int i=0,j=1;
vector<map<int,Student>> coll;
typedef std::map<int,Student> Mymap;
Mymap c1;
map<int, Student> mine(int key,Student value)
{
c1.insert(Mymap::value_type( key,value));
return c1;
}
void print(Mymap a)
{
Mymap m2;
coll.push_back(a);
m2 = coll[i];
i++;
Student s1 = m2.at(j);
j++;
}
int main()
{
typedef map<int, Student> map1;
Student s[5];
Student s1;
map1 m1;
s[0].setName("SAI");
s[1].setName("RAVI");
s[2].setName("RAJU");
s[3].setName("HemaChandra");
s[4].setName("Tushar");
s[0].setId(10);
s[1].setId(20);
s[2].setId(30);
s[3].setId(40);
s[4].setId(50);
m1 = mine(1,s[0]);
s1 = m1.at(1);
print(m1);
m1 = mine(2,s[1]);
s1 = m1.at(2);
print(m1);
m1 = mine(3,s[2]);
s1 = m1.at(3);
print(m1);
m1 = mine(4,s[3]);
s1 = m1.at(4);
print(m1);
m1 = mine(5,s[4]);
s1 = m1.at(5);
print(m1);
cout<<endl<<endl;
cout<<"Before Deleting"<<endl;
for(int i=0,j=1;i<coll.size();i++,j++)
{
Mymap m3 = coll[i];
Student st = m3.at(j);
std::cout <<" "<< st.getName()<<std::endl;
}
cout<<"\nAfter Deleting"<<endl;
coll.erase(coll.begin()+2);
// coll.erase(std::remove(coll.begin(), coll.end(), m1), coll.end()); -------Error when using this statement
for(int i=0,j=1;i<coll.size();i++,j++)
{
Mymap m3 = coll[i];
Student st = m3.at(j);
std::cout <<" "<< st.getName()<<std::endl;
}
return 0;
}
#include<iostream>
using namespace std;
class Student
{
public:
string name;
int id;
void setName(string nam);
void setId(int i);
string getName();
int getId();
};
#包括
使用名称空间std;
班级学生
{
公众:
字符串名;
int-id;
void setName(字符串名称);
void setId(inti);
字符串getName();
int getId();
};
我所需要的是,我想从向量中删除特定位置的贴图。也就是说,如果我想删除位置2处的地图,则应删除该地图;如果我想删除位置“n”处的地图,则应删除第n个地图。请帮我修一下这个。我找不到我在哪里犯了错误
当我使用erase()函数时,我遇到以下编译器错误:
您可能需要在类wStudent中实现运算符==显示
学生的代码。看起来您缺少一个比较运算符。谢谢。我添加了程序谢谢你的帮助。但是我没有得到你的帮助。在程序中我应该在哪里使用std::advance?@HemaChandra nvm我误读了你的代码。我还添加了错误。Thanks@dyp失败的是map::erase,但这是正确的。@Borgeader也是map int->Student,因此map只需要编辑代码中的@dyp://coll.erase(std::remove(coll.begin(),coll.end(),m1),coll.end())-------使用此语句时出错
这需要进行比较,因为我们正在擦除一个值。我需要从存储在vector@Borgleader哦!到目前为止我还没有看到它。