2012-06-27 47 views
-4

我試圖創建存儲在向量中的圖邊的組合。我需要生成AND並將生成的向量存儲在向量中。以下是我迄今爲止所做的,但目前尚未編譯;在C++中創建向量的置換

#include <stdlib.h> 
#include<iostream> 
#include<vector> 
#include<algorithm> 

struct edge{ 

int a; 
int b; 
int weight; 
edge(int u,int v,int cost) 
{ 
    a=u; 
    b=v; 
    weight=cost; 
} 

}; 


int main() 
{ 
    typedef std::vector<edge> V; //<or_any_class> 
    V v; 

    v.push_back(1,2,10); 
    v.push_back(1,3,10); 
    v.push_back(1,4,10); 
    v.push_back(3,4,10); 
    v.push_back(3,5,10); 
    v.push_back(3,5,10); 

    do{ 
     std::cout<<v[0]<<" "<<v[1]<<" "<<v[2]<<" "<<v[3]<<" "<<v[4]<<std::endl; 
    } 

    while(std::next_permutation(v.begin(),v.end())); 
return 0; 
} 

What Im trying to get as output; 

1 2 
1 3 
1 4 
3 4 
3 5 
4 3 
1 2 1 3 
1 2 1 4 

任何提示?

+1

什麼是編譯器錯誤? –

+0

.........運營商<'在...... –

+1

@AmaarBokhari:請給出錯誤的合理數量的細節。說「不編譯」對任何人都沒有幫助! – Rook

回答

7

誤區一:

v.push_back(1,2,10); 

應該

v.push_back(edge(1,2,10)); 
      ^^^^ 

誤區之二:

您需要定義operator <<edge類,以便std::cout<<v[0]可以編譯

std::ostream& operator << (std::ostream& o, const edge& e) 
{ 
    return o << e.a << " " << e.b << " " << e.weight; 
} 

誤區三:

您需要定義operator <egde類,以便std::next_permutation(v.begin(),v.end())可以編譯和運行

bool operator < (const edge& e1, const edge& e2) 
{ 
    if(e1.a != e2.a) return e1.a < e2.a; 
    if(e1.b != e2.b) return e1.b < e2.b; 
    return e1.weight < e2.weight; 
} 
+0

謝謝!糾正後,它仍然給編譯錯誤。 –

+1

@Amaar:你看到我的編輯了嗎?如果是的話,你會得到什麼編譯器錯誤? –

+0

爲什麼-minus投票? –

3

此:

v.push_back(1,2,10); 

應該是:

v.push_back(edge(1,2,10)); 
+1

或'v.push_back({1,2,10});'在C++ 11中給出解決方案,你會獲得更多的收益。多麼酷啊? :) – jrok

+0

@jrok,確實非常好。 – hmjd

+0

@jrok:Cooler:'v.emplace_back(1,2,10);' –