std::setとstd::mapの基本的な使い方
5854 ワード
std::setメンバー関数および簡単な使用方法
関数#カンスウ#
宣言
説明
insert
pair insert(const value_type& x)
iterator insert(iterator position, const value_type& x)
1、集合に要素を追加する
2、反復器が指す位置に指定した要素を配置する
count
size_type count(const key_type& x)
コンテナ内の要素の数を計算します.std::setに対して1(存在)または0(存在しません)です.要素が存在するかどうかを判断するために使用できます.
find
指定の検索
empty
bool empty()
現在のコンテナが空かどうかを判断
size
size_type size()
現在のコンテナ内の要素の数を取得
clear
void clear()
現在のコンテナを空にする
begin
宣言
end
宣言
rbegin
宣言
rend
宣言
erase
void erase(iterator position)
void erase(iterator first, iterator last)
size_type erase(const key_type& x)
begin
宣言
begin
宣言
begin
宣言
begin
宣言
begin
宣言
begin
宣言
begin
宣言
現在のコンテナを空にする
現在のエレメントが自分のnewから出てきたオブジェクトのポインタである場合、clear関数を呼び出す前に、このメモリの一部を自分で解放する必要があります.例えば、次のような操作を行います.
myclass *p1 = new myclass();
myclass *p2 = new myclass();
myclass *p3 = new myclass();
std::set set_class;
set_class.insert(p1);
set_class.insert(p2);
set_class.insert(p3);
set_class.clear();
プログラムが上記のような手順のみであれば、p 1、p 2、p 3は実際には別の本格的な解放はなく、SVRで実行されるとメモリが漏れることになる.実際には次のようになります.
myclass *p1 = new myclass();
myclass *p2 = new myclass();
myclass *p3 = new myclass();
std::set set_class;
set_class.insert(p1);
set_class.insert(p2);
set_class.insert(p3);
for (std::set::iterator it = set_class.begin(); it != set_class.end(); it++)
delete *it;
set_class.clear();
erase操作についても同様です.要素を削除する前に、必要に応じてメモリを自分で解放します.
データの取得
1、std::setは下表オペレータを提供しない;
2、要素が存在するかどうかを判断するだけで、count関数を使って戻り値をチェックすることができます.
3、要素の値を取得する必要がある場合は、反復器を使用します.*iteratorは、反復器が指す値です.
std::set<:string> set_limit;
set_limit.insert(“User@123”);
set_limit.insert(“User@124”);
set_limit.insert(“User@125”);
//判断」User@124」がコレクションにあるかどうか
if (set_limit.count(“User@124”) == 1)
cout << “User@124コレクションに存在する"<
cout << “User@124集合にいない"<
for (std::set<:string>::iterator it = set_limit.begin(); it != set_limit.end(); it++)
cout << *it << std::endl;
注意:set内の要素を指す反復器を取得すると、読み書き操作ではなく読み書き操作しかできません.
std::setタイプ定義
typedef Key key_type;
typedef Key value_type;
typedef typename rep_type::const_pointer pointer;
typedef typename rep_type::const_pointer const_pointer;
typedef typename rep_type::const_reference reference;
typedef typename rep_type::const_reference const_reference;
typedef typename rep_type::const_iterator iterator;
typedef typename rep_type::const_iterator const_iterator;
typedef typename rep_type::const_reverse_iterator reverse_iterator;
typedef typename rep_type::const_reverse_iterator const_reverse_iterator;
typedef typename rep_type::size_type size_type;
typedef typename rep_type::difference_type difference_type;
注:STLのソースコードを深く見るとsize_が表示されますtypeのタイプは実はsize_tは、実装によって異なる場合もある.
std::set使用例
std::setの宣言
std::set<:string> set_string;//要素タイプはstd::string、*反復器で得られる数値タイプはstd::string
std::set set_int;//要素タイプはint、*反復器で得られる数値タイプはint
適用シーン:アイテムの両替制限ユーザーごとに1回しか両替できず、両替したユーザーを保存します.
mapの基本的な使い方:挿入、検索、削除、遍歴など、デュアルキーmapを実現する方法を教えてくれます.
(1)2つのキーが一致している場合のみターゲットにヒットする(2)2つのキーのいずれかが一致している場合はターゲットにヒットする
マルチキーに拡張可能
( )
:
1.map Key object T Object , Pair Associative Container, value type pair。
2. Unique Associative Container, Key。
3. Sorted Associative Container, less,greater functor, ,
hash table equal_to, not_equal_to functor。
( )
, map : 、 、 、 、 。
#if defined (_MSC_VER)
#pragma warning(disable: 4786)
#endif
#include
#include
//travel delete item from map
if(itr1->first == 2)
{
_map.erase(it++);
continue; }
std::cout << "Item:" << itr1->first << ", content: " << itr1->second << std::endl;
++it; }
std::cout << std::endl;
_map.clear();
return 0;
}