C++におけるmapの基本動作
3658 ワード
1、map概要
mapは関連コンテナです.反復器に対するノードの追加と削除の影響は小さく,その操作ノードを除いて他のノードには影響がないことが特徴である.反復器の場合、keyは変更せずに実値を変更できます.
2、mapの機能
Key-valueの対応を自動的に確立します.keyとvalueは任意に必要なタイプです.
key値に基づいてレコードをすばやく検索すると,検索の複雑さは基本的にLog(N)であり,1000個のレコードがあれば最大10回,1000000個のレコードを検索し,最大20回検索する.
Key-Valueレコードをすばやく挿入します.
レコードをすばやく削除
Keyに従ってvalueレコードを変更します.
すべてのレコードを巡回する.
3、mapを使う
mapを使用してmapクラスが存在するヘッダファイルを含める
#include//STLヘッダファイルには拡張子がありません.h
mapオブジェクトはテンプレートクラスであり、キーワードとストレージオブジェクトの2つのテンプレートパラメータが必要です.
これによりintをインデックスとして定義、stringを指すポインタが関連付けられている.
使いやすいようにテンプレートクラスをタイプ定義して、
4、mapに要素を挿入する
mapクラスが[]オペレータをリロードしているため、mapのエントリを変更するのは簡単です.
.....
これは非常に直感的ですが、パフォーマンスの問題があります.2を挿入する場合、まずenumMapでプライマリ・キーが2の項目を検索し、見つからなかった後、新しいオブジェクトをenumMapに挿入し、キーは2で、値は空の文字列で、挿入が完了した後、文字列を「Two」に割り当てます.このメソッドでは、各値をデフォルト値に割り当て、表示される値に割り当てます.要素がクラスオブジェクトの場合、オーバーヘッドが大きくなります.コストを回避するには、次の方法を使用します.
5、mapの要素を検索して取得する
下付きオペレータは、値を取得する最も簡単な方法を示します.
ただし、mapにこのキーのインスタンスがある場合にのみ正しいです.そうしないと、初期化値の値を持つインスタンスが自動的に挿入されます.
Find()とCount()法を用いて,キーが存在するかどうかを発見できた.
検索mapにキーワードエントリがfind()メソッドで含むかどうか、入力パラメータは検索するkeyであり、ここではbegin()とend()の2つのメンバーに言及する必要があり、mapオブジェクトの最初のエントリと最後のエントリをそれぞれ表し、この2つのデータのタイプはiteratorである.
mapオブジェクトの方法で取得されたiteratorデータ型はstd::pairオブジェクトで、2つのデータiterator->firstとiterator->secondがそれぞれキーワードと格納されたデータを表す
6、mapから要素を削除する
mapのエントリを削除するにはerase()
このメンバーメソッドの定義は次のとおりです.
7、mapの基本操作関数:
C++Mapsは関連コンテナで、「キーワード/値」を含むbegin()はmapヘッダを指す反復器clear()すべての要素count()を削除し、指定した要素の出現回数empty()mapが空の場合true end()を返します.mapの末尾を指す反復器equalを返します.range()特殊なエントリを返す反復器はerase()要素find()を削除して要素get_を検索するallocator()はmapのコンフィギュレーションinsert()挿入要素key_を返します.comp()は比較要素keyの関数lower_を返すbound()戻りキー値>=与えられた要素の最初の位置max_size()は、収容可能な最大要素個数rbegin()を返し、mapの尾を指す逆反復器rend()を返し、mapの頭を指す逆反復器size()を返し、mapの要素の個数swap()を返します.2つのmap upperを交換します.bound()戻りキー値>指定した要素の最初の位置value_comp()は比較要素valueの関数を返します
例:
以上述べたのは編集者が皆さんに紹介したC++中mapの基本的な操作で、皆さんに役に立つことを望んでいます.もし皆さんが何か疑問があれば、私にメッセージを送ってください.編集者はすぐに皆さんに返事します.
mapは関連コンテナです.反復器に対するノードの追加と削除の影響は小さく,その操作ノードを除いて他のノードには影響がないことが特徴である.反復器の場合、keyは変更せずに実値を変更できます.
2、mapの機能
Key-valueの対応を自動的に確立します.keyとvalueは任意に必要なタイプです.
key値に基づいてレコードをすばやく検索すると,検索の複雑さは基本的にLog(N)であり,1000個のレコードがあれば最大10回,1000000個のレコードを検索し,最大20回検索する.
Key-Valueレコードをすばやく挿入します.
レコードをすばやく削除
Keyに従ってvalueレコードを変更します.
すべてのレコードを巡回する.
3、mapを使う
mapを使用してmapクラスが存在するヘッダファイルを含める
#include//STLヘッダファイルには拡張子がありません.h
mapオブジェクトはテンプレートクラスであり、キーワードとストレージオブジェクトの2つのテンプレートパラメータが必要です.
std:map personnel;
これによりintをインデックスとして定義、stringを指すポインタが関連付けられている.
使いやすいようにテンプレートクラスをタイプ定義して、
typedef map UDT_MAP_INT_CSTRING;
UDT_MAP_INT_CSTRING enumMap;
4、mapに要素を挿入する
mapクラスが[]オペレータをリロードしているため、mapのエントリを変更するのは簡単です.
enumMap[1] = "One";
enumMap[2] = "Two";
.....
これは非常に直感的ですが、パフォーマンスの問題があります.2を挿入する場合、まずenumMapでプライマリ・キーが2の項目を検索し、見つからなかった後、新しいオブジェクトをenumMapに挿入し、キーは2で、値は空の文字列で、挿入が完了した後、文字列を「Two」に割り当てます.このメソッドでは、各値をデフォルト値に割り当て、表示される値に割り当てます.要素がクラスオブジェクトの場合、オーバーヘッドが大きくなります.コストを回避するには、次の方法を使用します.
enumMap.insert(map :: value_type(2, "Two"))
5、mapの要素を検索して取得する
下付きオペレータは、値を取得する最も簡単な方法を示します.
CString tmp = enumMap[2];
ただし、mapにこのキーのインスタンスがある場合にのみ正しいです.そうしないと、初期化値の値を持つインスタンスが自動的に挿入されます.
Find()とCount()法を用いて,キーが存在するかどうかを発見できた.
検索mapにキーワードエントリがfind()メソッドで含むかどうか、入力パラメータは検索するkeyであり、ここではbegin()とend()の2つのメンバーに言及する必要があり、mapオブジェクトの最初のエントリと最後のエントリをそれぞれ表し、この2つのデータのタイプはiteratorである.
int nFindKey = 2; // Key
// ( )
UDT_MAP_INT_CSTRING::iterator it= enumMap.find(nFindKey);
if(it == enumMap.end()) {
//
}
else {
//
}
mapオブジェクトの方法で取得されたiteratorデータ型はstd::pairオブジェクトで、2つのデータiterator->firstとiterator->secondがそれぞれキーワードと格納されたデータを表す
6、mapから要素を削除する
mapのエントリを削除するにはerase()
このメンバーメソッドの定義は次のとおりです.
iterator erase(iterator it); //
iterator erase(iterator first, iterator last); //
size_type erase(const Key& key); //
clear() enumMap.erase(enumMap.begin(), enumMap.end());
7、mapの基本操作関数:
C++Mapsは関連コンテナで、「キーワード/値」を含むbegin()はmapヘッダを指す反復器clear()すべての要素count()を削除し、指定した要素の出現回数empty()mapが空の場合true end()を返します.mapの末尾を指す反復器equalを返します.range()特殊なエントリを返す反復器はerase()要素find()を削除して要素get_を検索するallocator()はmapのコンフィギュレーションinsert()挿入要素key_を返します.comp()は比較要素keyの関数lower_を返すbound()戻りキー値>=与えられた要素の最初の位置max_size()は、収容可能な最大要素個数rbegin()を返し、mapの尾を指す逆反復器rend()を返し、mapの頭を指す逆反復器size()を返し、mapの要素の個数swap()を返します.2つのmap upperを交換します.bound()戻りキー値>指定した要素の最初の位置value_comp()は比較要素valueの関数を返します
例:
// :
map::iterator iter;
for(iter = m_AgentClients.begin(); iter != m_AgentClients.end(); ++iter)
{
if(iter->first=="8001" {
this->SendMsg(iter->second.pSocket,strMsg);//iter->first
}
}
// :
map::iterator iter=m_AgentClients.find(strAgentName);
if(iter!=m_AgentClients.end())// {
}
else // {
}
//
if (m_AgentClients.size()==0)
//
map::iterator iter=m_AgentClients.find(pSocket->GetName());
if(iter!=m_AgentClients.end())
{
m_AgentClients.erase(iter);//
}
以上述べたのは編集者が皆さんに紹介したC++中mapの基本的な操作で、皆さんに役に立つことを望んでいます.もし皆さんが何か疑問があれば、私にメッセージを送ってください.編集者はすぐに皆さんに返事します.