スポンサーリンク

| キーワード:

C++/CLIで自作クラスの配列をソート

 近所の村の市の店長はとてもいい人なのだが、中島みゆきの糸をBGMにかけていたときはさすがに神経を疑った。いったい何のつもりだ。泣き出すところだっただろうが。

そんなわけでプエルトリコがデフォルトしたらしい。デフォルトってどういうことなのか正確には掴めていないんだが、要は○○日までにお金払いますよ、という約束を果たせなかったということのようだ。気持ち的に近い言葉としては、不渡りとか踏み倒しとか、そのあたりだろうか。

http://www.yomiuri.co.jp/world/20150630-OYT1T50077.html

この結果、高金利の金融商品「プエルトリコ債」が償還されなくなる恐れがあり、米国の投資信託などが多く保有していることから、国際金融市場に深刻な影響を与える懸念がある。

どうやらこういうのはデフォルト宣言があった次の日にどうなる、というものではなく、数週間かけて影響が出てくるという。もうしばらくしたら連鎖倒産が始まるんじゃないか、と予想する人も沢山いるようだ。どうせゼロ金利だし、取り付け騒ぎとか預金封鎖がくる前に定期預金をタンス預金に切り替えたほうがいいかもしれない。箱根山も騒がしいしね。

 

あとソートのほうなんだが、C#の例は腐るほどあるのにC++/CLIの例がなかなか見つからない。
C#と同類のはずなのに^つけないといけないとか、C++と名乗りながら継承にpublicつけないとか、お前は誰だ言語なのでメモしておかないとはまる可能性がある

 

// ConsoleApplication2.cpp : メイン プロジェクト ファイルです。

#include "stdafx.h"

using namespace System;

ref class DataType{ //自作クラス 何でもいい
    int a;
    System::String^ b;
public:
    int geta(){ return a; }
    System::String^ getb(){ return b; }
    void set(int _a,System::String^ _b){
        a = _a;
        b = _b;
    }
};

//比較用のクラス。
//IComparer<>を継承したクラスを作成し、
//virtual int Compareメンバ関数を定義する
ref class Ccmp : System::Collections::Generic::IComparer<DataType^>
{
public:
    //xがyより小さいときはマイナスの数、大きいときはプラスの数、同じときは0を返す
    virtual int Compare(DataType^ x, DataType^ y)
    {
        if( x->geta() < y->geta() )
            return -1;
        else if( x->geta() > y->geta() ){
            return 1;
        }
        return 0;
    }
};


//使い方
int main(array<System::String ^> ^args)
{
    //データ(配列)を用意
    int sz = 7;
    array<DataType^>^ ary = gcnew array<DataType^>(sz);

    for(int i = 0; i < sz; i++ ){
        ary[i] = gcnew DataType();
    }
    ary[0]->set(5,"5");
    ary[1]->set(2,"2");
    ary[2]->set(7,"7");
    ary[3]->set(1,"1");
    ary[4]->set(3,"3");
    ary[5]->set(5,"5");
    ary[6]->set(8,"8");

    //ソート実行。
    Ccmp^ cmp = gcnew Ccmp();//比較用クラスのインスタンスを作成し、
    Array::Sort( ary, cmp);//Array::Sortの第二引数にそのハンドルを渡す

    //結果確認
    for(int i = 0; i < sz; i++ ){
        Console::WriteLine( "{0} {1}",ary[i]->geta() , ary[i]->getb() );
    }

    int k = Console::Read();

    return 0;
}

 

コメントを残す

メールアドレスが公開されることはありません。

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)


この記事のトラックバックURL: