2017-04-23 6 views
-1

文字列や文字を使って配列をインデックスすることはできますか?例えば

double myArray[3] = {0.0}; 

myArray["SSN_1"] = 2.0; 
myArray["SSN_2"] = 3.0; 
myArray["SSN_3"] = 2.0; 

for(... how? ...) 
{ 
... Print ... but, how? ... 
} 

ご参照をお持ちの場合は、リンクしてください。

+3

が、これは単に基本的な概念の説明のために、あなたの代わりにstd::mapを使用するべきであることを注意してください、続行する方法を説明しますいいえ、それはありません.... – OldProgrammer

+2

4kの担当者と、私はあなたの最初の呼び出しポートされている基本的な検索を期待していただろう。 –

答えて

2

にはありません。整数だけが許可されています。

連想コンテナは

struct double_map_item { 
    char *key; 
    double value; 
}; 

のような単純な構造体を構築することができ、そのキーの値によって項目を見つけるための簡単な方法のためのbsearch()のマニュアルページの例を見てみましょう。

もちろん、これは非常に単純化された実装であり、より完全で堅牢な実装のためには、ハッシュテーブルについて読む必要があります。

this commentについては、Cの文字定数のタイプはintので

array['x'] = value; 

は有効ですが、あなたが唯一使用できる

  1. 、ので、これは本当に便利ではないことに注意されます単一の文字。
  2. おそらく、必要以上に大きなサイズの配列を使用します。
  3. インデックスの可能性が非常に限られています。

your own comment以下、あなたがC++コードを見た可能性があります。 C++では、[]演算子をオーバーロードして、const char *をパラメータとし、ハッシュテーブルまたは他の方法を使用して、指定されたキーに一致する要素を検索することができます。

しかし、cでは不可能です。

1は、C++でのこのような容器を実装した場合、次の例では、

#include <iostream> 
#include <map> 

class Array { 
public: 
    Array(); 
    double operator[](const char *const key); 
    void insert(const char *const key, double value); 

private: 
    std::map<const char *, double> m_items; 
}; 

Array::Array() 
{ 
} 

double 
Array::operator[](const char *const key) 
{ 
    return m_items[key]; 
} 

void 
Array::insert(const char *const key, double value) 
{ 
    m_items.insert(std::pair<const char *, double>(key, value)); 
} 

int 
main(void) 
{ 
    Array items; 

    items.insert("SSN_1", 2.0); 
    items.insert("SSN_2", 3.0); 
    items.insert("SSN_3", 2.0); 

    std::cout << items["SSN_1"] << std::endl; 
    return 0; 
} 
+0

文字は整数型なので、インデックスとして機能することができます(ほとんどの場合、非常に有用な方法ではありません)。 –

+0

私はどこかで、おそらく文字列検索アルゴリズムの実装で見たと思います。 – anonymous

+0

しかし、 '[] '演算子をオーバーロードすることができるので、c、C++ではありません。 –

関連する問題