포인터 삽입 여부에 따라 값 삽입 방식이 다르게 작동합니다. 이 코드의 문제점은 무엇입니까? 첫 번째 for 루프는 포인터를 사용하여 세트에 삽입되고 두 번째 루프는 포인터가 없습니다. 그 외 모든 것은 완전히 동일합니다.std :: set 포인터에 삽입
#include <iostream>
#include <set>
using namespace std;
typedef struct{
int local;
int global;
}Node;
Node CreateNode(int global, int local) {
Node n; n.local=local; n.global=global;
return(n);
}
bool compare(Node a, Node b){
a.global < b.global;
}
int main()
{
std::pair<std::set<Node>::iterator,bool> itr;
set<Node,bool(*)(Node,Node)> *graph_set_pointer = new set<Node,bool(*)(Node,Node)>(compare);
for(int i=10;i>0;--i){
itr = graph_set_pointer->insert(CreateNode(i,i));
cout << "global = " << i << " local = " << i ;
cout << " inserted_global = " << (*itr.first).global << endl;
}
cout << "Number of items in pointer set = " << graph_set_pointer->size() << "\n\n";
set<Node,bool(*)(Node,Node)> graph_set_object(compare);
for(int i=10;i>0;--i){
itr = graph_set_object.insert(CreateNode(i,i));
cout << "global = " << i << " local = " << i ;
cout << " inserted_global = " << (*itr.first).global << endl;
}
cout << "Number of items in non pointer set = " << graph_set_object.size() <<"\n";
delete graph_set_pointer;
return 0;
}
출력 :
global = 10 local = 10 inserted_global = 10
global = 9 local = 9 inserted_global = 9
global = 8 local = 8 inserted_global = 8
global = 7 local = 7 inserted_global = 7
global = 6 local = 6 inserted_global = 7
global = 5 local = 5 inserted_global = 7
global = 4 local = 4 inserted_global = 7
global = 3 local = 3 inserted_global = 7
global = 2 local = 2 inserted_global = 7
global = 1 local = 1 inserted_global = 7
Number of items in pointer set = 4
global = 10 local = 10 inserted_global = 10
global = 9 local = 9 inserted_global = 9
global = 8 local = 8 inserted_global = 8
global = 7 local = 7 inserted_global = 7
global = 6 local = 6 inserted_global = 6
global = 5 local = 5 inserted_global = 5
global = 4 local = 4 inserted_global = 4
global = 3 local = 3 inserted_global = 3
global = 2 local = 2 inserted_global = 2
global = 1 local = 1 inserted_global = 1
Number of items in non pointer set = 10
근무중인 플랫폼은 무엇입니까? g ++ 4.7.3으로 정상적인 동작을보고 있습니다. –
[이것이 당신이보아야하는 것입니까?] (http://ideone.com/17tuZs)? 코드에서 ideone.com으로 그대로 복사됩니다. – WhozCraig
@WhozCraig [같음] (http://ideone.com/Lk1Hx2) – dasblinkenlight