可以更改C+;中存储在集合中的对象的非关键部分+;。如何在java中执行类似操作?
C++ 假设我们在一个集合中插入5个对象。每个对象都有一个id和一个名称作为属性。我们可以通过这样的方式获得我们正在搜索的元素的迭代器可以更改C+;中存储在集合中的对象的非关键部分+;。如何在java中执行类似操作?,java,c++,Java,C++,C++ 假设我们在一个集合中插入5个对象。每个对象都有一个id和一个名称作为属性。我们可以通过这样的方式获得我们正在搜索的元素的迭代器 int main() { set<Obj*> setObj; Obj *objA = new Obj(10,"P"); Obj * objB = new Obj(20,"L"); setObj.insert(objA);setObj.insert(objB); set<Obj*>::iterator it = se
int main()
{
set<Obj*> setObj;
Obj *objA = new Obj(10,"P"); Obj * objB = new Obj(20,"L");
setObj.insert(objA);setObj.insert(objB);
set<Obj*>::iterator it = setObj.find(objA);
if( it > 0 )
it->name = "New name";
}
intmain()
{
设置setObj;
Obj*objA=新Obj(10,“P”);Obj*objB=新Obj(20,“L”);
setObj.insert(objA);setObj.insert(objB);
set::iterator it=setObj.find(objA);
如果(它>0)
它->名称=“新名称”;
}
//希望想法清楚。我基本上可以更改集合中对象的非键部分。在这种情况下,obj类将键作为id
现在在Java中,由于我们没有设置提供find,唯一的方法是通过循环吗
如果语法不正确,请道歉。尚未编译代码的Java Set没有搜索方法。它只有contains(对象o)和containAll(集合o)方法。您必须迭代集合,因为Java集合是未排序的。索引是无意义的。Java集合用于唯一的、不可变的元素
如果希望具有与键关联的可变值,则应使用映射。顺便说一句,大多数Set实现只是包装一个映射。是的,您必须通过调用
迭代器()来循环它。
。上面的代码在C++中没有做什么你认为它做:代码使用一个代码> STD::SET/CODER >由指针值排序。如果要按对象的id
对对象进行排序,则需要使用自定义比较对象。此外,您不能将迭代器与0
进行比较。您需要将迭代器与集合的end()
进行比较。请,开始在句子末尾的点旁边添加空格…是的,对象类重载了<运算符,以便使用id进行比较,确定我们与结尾进行比较..但是我们仍然无法在java中执行类似的操作?无论如何,您可能应该使用std::map
-您希望将不可变键映射到可变键(虽然关键字不需要)值。它自动地记录你要做的事情。这也使得你的目标更容易实现,提供编译器安全性(通过类型系统),并且在C++中,消除了在堆中分配对象之前需要分配的对象(这总是一个双赢)。.Java的映射接口也有一个,它应该允许您执行所需的操作。