2017-10-12 4 views
0

ランダムな点集合のグラフ上で最も左の点を見つけようとしています。例えば、点(3,5)(5,2)(8,7)(1,3)のうち、最も左の点は(1,3)となる。私がこれを行うと、ベクトルの点0に最も左の点を置く必要があります。私はmostLeftが元々どこから来たのかわからないので、2つの変数を切り替えるのに問題があります。 mostLeftは2つのintを含むノードです。ベクトル内の2つの値を交換する

私はmostLeft二回

swap(list[0], mostLeft) 

が、それだけのコピーを使用して試してみました。

私も

Point temp = list[0]; 
    list.erase(remove(list.begin(), list.end(). mostLeft), list.end()); 
    list[0] = left; 
    list.push_back(temp); 

を試してみましたが、これは私に「削除する引数にconstのchar型*にベクトルを変換することはできません」エラーが発生します。私はオンラインから2番目のコードブロックを取得しました。私はそれがうまくいくかどうか分かっていますが、私はそれを試したのでポップアップを見続けました。

これらの値を簡単に交換する方法はありますか、手動でベクトルを反復して値を見つける必要がありますか。

+2

、そのコードでもないコンパイルです、 'bein()'や 'list.end()。mostleft'は、あなたが使っているものや使用しようとしているものから取られたものではありません。 –

+0

@mhemmy swap(list [0]、mostLeft)でmostLeftを使う方法がわかりません –

+0

'mostLeft'は参照ではないと思います。 – MSalters

答えて

0

は私が正しく理解している場合は、その後、達成しようとしているものは、次のアプローチを使用することができます

#include <iostream> 
#include <utility> 
#include <vector> 
#include <algorithm> 

int main() 
{ 
    std::vector<std::pair<int, int>> v = 
    { 
     { 3, 5 }, { 5, 2 }, { 8, 7 }, { 1, 3 } 
    }; 

    for (const auto &p : v) 
    { 
     std::cout << "(" << p.first << ", " << p.second << ") "; 
    } 
    std::cout << std::endl; 

    auto mostLeft = [](const auto &a, const auto &b) { return a.first < b.first; }; 

    std::swap(v[0], *std::min_element(v.begin(), v.end(), mostLeft)); 

    for (const auto &p : v) 
    { 
     std::cout << "(" << p.first << ", " << p.second << ") "; 
    } 
    std::cout << std::endl; 
} 

プログラムの出力は、有効な最小限の例を提供してください

(3, 5) (5, 2) (8, 7) (1, 3) 
(1, 3) (5, 2) (8, 7) (3, 5) 
関連する問題