Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/164.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
可以更改C+;中存储在集合中的对象的非关键部分+;。如何在java中执行类似操作?_Java_C++ - Fatal编程技术网

可以更改C+;中存储在集合中的对象的非关键部分+;。如何在java中执行类似操作?

可以更改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

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 = 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的映射接口也有一个,它应该允许您执行所需的操作。