C++ 将结构的地址分配给另一个结构的指针

C++ 将结构的地址分配给另一个结构的指针,c++,pointers,structure,C++,Pointers,Structure,我正在创建结构并将它们推到两个向量。在创建这些结构的同时,我还使用下限函数对它们进行排序。第一个结构按名称排序,第二个结构按ID排序 该函数如下所示: bool AddAndSort ( name , ID ) { auto it = lower_bound ( arr_1 . begin (), arr_1 . end (), name, compare2 () ); auto it1 = lower_bound( arr_2 . begin(), arr_2 .end(), ID

我正在创建结构并将它们推到两个向量。在创建这些结构的同时,我还使用下限函数对它们进行排序。第一个结构按名称排序,第二个结构按ID排序

该函数如下所示:

bool AddAndSort ( name , ID )
{
  auto it = lower_bound ( arr_1 . begin (), arr_1  . end (), name, compare2 () );
  auto it1 = lower_bound( arr_2 . begin(), arr_2 .end(), ID , compare1 (  ) );

 struct1 tmp1( name ); // create temporary structures which i will push to the vector
 struct2 tmp( ID );

 arr_1 . insert ( it, tmp );
 arr_2 . insert ( it1, tmp1);

/*tmp . p = &tmp1;
  tmp1 . p = &tmp;*/

return true;

}
问题是:如何在这两个结构中设置指针 互相指指点点

我试过这个:

tmp . p = &tmp1;
tmp1 . p = &tmp;
但这是行不通的

结构:

struct struct1
{
  struct1 ( string name ) : name ( name ) { }
  string name
  struct2 *p;
};

struct struct2
{
  struct2 ( int ID ) : ID ( ID ) { }
  int ID;
  struct1 *p;
}
向量:

vector<struct1> arr_1
vector<struct2> arr_2
向量arr\u 1
向量arr_2
您可能需要:

auto inserted_it1 = arr_1.insert(it, tmp);
auto inserted_it2 = arr_2.insert(it1, tmp1);

inserted_it1->p = &*inserted_it2;
inserted_it2->p = &*inserted_it1;
但是以前的引用会因
insert

而无效,您可能需要:

auto inserted_it1 = arr_1.insert(it, tmp);
auto inserted_it2 = arr_2.insert(it1, tmp1);

inserted_it1->p = &*inserted_it2;
inserted_it2->p = &*inserted_it1;
但是以前的引用会因插入而无效

第一个结构按名称排序,第二个结构按ID排序

检查-它可以完全做到这一点(有多个排序索引)只有一个单一的结构

因为正如所指出的,跨结构保留指针可能容易出错(地址在插入/删除时会发生更改等)。
boost::multi_index
可在发动机罩下自动控制发动机

第一个结构按名称排序,第二个结构按ID排序

检查-它可以完全做到这一点(有多个排序索引)只有一个单一的结构



因为正如所指出的,跨结构保留指针可能容易出错(地址在插入/删除时会发生更改等)。
boost::multi_index
可在引擎盖下自动处理该功能。

为什么不起作用?你有编译器错误吗<代码>索引在您的结构中不存在,您的意思是
p
?对不起,我忘了编辑名称它应该是pOkay,您仍然需要发布编译器错误。另外,
std::lower_bound
不会对任何内容进行排序,您的函数签名也不会被编译。我没有任何编译器错误,只是在打印时显示一些未定义的字符和数据。
tmp
与向量中的对象不同。当你插入一个副本时,为什么它不起作用?你有编译器错误吗<代码>索引在您的结构中不存在,您的意思是
p
?对不起,我忘了编辑名称它应该是pOkay,您仍然需要发布编译器错误。另外,
std::lower_bound
不会对任何内容进行排序,您的函数签名也不会被编译。我没有任何编译器错误,只是在打印时显示一些未定义的字符和数据。
tmp
与向量中的对象不同。当你插入一个副本时,第一个是什么意思?@kvway:
first
用于插入
std::map
/
std::set
。Removed as
std::vector::insert
直接返回迭代器。它在类方法内部工作,但当我声明另一个方法从另一个结构打印元素时,我得到了(auto const&tmp:arr_2)cout name的seg fault
,正如我所说的,这些引用非常脆弱,只要调用两次就会失效。first应该是什么意思?@kvway:
first
用于插入
std::map
/
std::set
。Removed as
std::vector::insert
直接返回迭代器。它在类方法内部工作,但当我声明另一个方法来从另一个结构打印元素时,我得到了seg fault
for(auto const&tmp:arr_2)cout name正如我所说的,这些引用非常脆弱,只要调用两次就失效。