|
さてと、僕の出番だ ^^;
#include <iostream>
#include <cliext/hash_map>
using namespace System;
/* 等しかったらtrueを返せ */
bool my_comp(array<char>^ k1, array<char>^ k2) {
if ( k1->Length != k2->Length) return false;
for ( int i = 0; i < k1->Length; ++i ) {
if ( k1[i] != k2[i] ) return false;
}
return true;
}
/* hash値を返せ */
int my_hash(array<char>^ k1) {
int result = 0;
for each ( char item in k1 ) {
result = result*3 + item;
}
return result;
}
int main() {
typedef cliext::hash_map<array<char>^, int> my_hashmap;
// 上記my_comp, my_hash から delegateを起こしてコンストラクタに渡す。
my_hashmap hm(gcnew my_hashmap::key_compare(&my_comp), gcnew my_hashmap::hasher(&my_hash));
array<char>^ a1 = gcnew array<char>{ 1, 2, 3};
array<char>^ a2 = gcnew array<char>{ 4, 5, 6};
array<char>^ a3 = gcnew array<char>{ 7, 8, 9};
// hash_mapにセット
hm[a1] = 123;
hm[a2] = 456;
hm[a3] = 789;
// 表引きできるかな?
std::cout << hm[a1] << std::endl;
std::cout << hm[a2] << std::endl;
std::cout << hm[a3] << std::endl;
}
|