セット、マップの使用

 

 

 

 

//

// | ----------------------------------------------- --------------------------------

// | Copyright(C)2001 Reuters、-

// | 1400ケンジントンロード、オークブルック、イリノイ州。60523-

// | 全著作権所有。複製または配布は禁止されています-

// | ----------------------------------------------- --------------------------------

//

//

// SubscriptionInfoMap.h:サービス中のサブスクリプションのストレージクラス

//名前とアイテム名のペア

//

 

#if!defined(SUBSCIPTION_INFO_MAP_INCLUDED_)

#define SUBSCIPTION_INFO_MAP_INCLUDED_

 

#if _MSC_VER> 1000

プラグマ1回

endifの// _MSC_VER> 1000年

 

IFNDEF WIN32

#include <cassert>

undefを_ASSERTE

#define_ASSERTEアサート

endifの

 

#include <set>

#include <map>

 

 

クラスSubscriptionInfoMap

{{

公衆:

 

 

typedef std :: map <std :: string、std :: set <std :: string> *> SUBSCRIPTIONSMAP;

 

SubscriptionInfoMap();

仮想〜SubscriptionInfoMap();

 

void addSubscriptionBySubject(const std :: string&subject);

void addSubscriptionByServiceItem(const std :: string&serviceName、const std :: string&itemName);

const std :: set <std :: string> * getSubListByServiceName(const std :: string&serviceName)const ;

bool hasService(const std :: string&serviceName)const ;

 

民間:

フレンドクラスSubscriptionInfoMapIterator;

 

SUBSCRIPTIONSMAP _subscriptions;

bool _isSubjectList;

};

 

 

クラスSubscriptionInfoMapIterator

{{

公衆:

明示的なSubscriptionInfoMapIterator(const SubscriptionInfoMap&infoMap);

〜SubscriptionInfoMapIterator();

 

void start();

void forth();

bool off()const ;

const std :: string&getServiceName()const ;

const std :: set <std :: string>&getItemSet()const ;

 

民間:

const SubscriptionInfoMap&_infoMap;

SubscriptionInfoMap :: SUBSCRIPTIONSMAP :: const_iterator _mapIt;

};

 

endifの//!定義された(SUBSCIPTION_INFO_MAP_INCLUDED_)

 

 

 

 

// SubscriptionInfoMap。cpp:SubscriptionInfoMapクラスの実装。

//

//

 

 

プラグマ警告(無効:4786)

プラグマ警告(無効:4503)

 

 

#include "StdAfx.h"

#include "SubscriptionInfoMap.h"

 

//

//建設/破壊

//

 

SubscriptionInfoMap :: SubscriptionInfoMap()

{{

 

}

 

SubscriptionInfoMap :: 〜SubscriptionInfoMap()

{{

if(_subscriptions.size())

{{

for(SUBSCRIPTIONSMAP :: iterator it = _subscriptions.begin();

it!= _subscriptions.end();

it = _subscriptions.begin())

{{

std :: set <std :: string> * pItemSet = static_cast <std :: set <std :: string> *>((* it).second);

_subscriptions.erase(it);

pItemSet-> clear();

pItemSetを削除します。

}

}

 

}

 

void SubscriptionInfoMap :: addSubscriptionBySubject(const std :: string&subject)

{{

std :: string serviceName;

 

int pos = subject.find_first_of( "。"、0);

if(pos == std :: string :: npos

戻る;

そうしないと

serviceName =件名。substr(0、pos);

 

addSubscriptionByServiceItem(serviceName、subject);

}

 

void SubscriptionInfoMap :: addSubscriptionByServiceItem(const std :: string&serviceName、const std :: string&itemName)

{{

 

SUBSCRIPTIONSMAP :: const_iterator it = _subscriptions.find(serviceName);

std :: set <std :: string> * pItemSet = 0;

 

if(it!= _subscriptions.end())

{{

pItemSet =(* it).second;

pItemSet-> insert(itemName.c_str());

}

そうしないと

{{

pItemSet = new std :: set <std :: string>;

pItemSet-> insert(itemName.c_str());

_subscriptions.insert(SUBSCRIPTIONSMAP :: value_type(serviceName.c_str()、pItemSet));

}

 

}

 

const

std :: set <std :: string> * SubscriptionInfoMap :: getSubListByServiceName(const std :: string&serviceName)

const

{{

SUBSCRIPTIONSMAP :: const_iterator it = _subscriptions.find(serviceName);

std :: set <std :: string> * pItemSet = 0;

 

if(it!= _subscriptions.end())

return(* it).second;

そうしないと

0を返します。

}

 

ブール

SubscriptionInfoMap :: hasService(const std :: string&serviceName)

const

{{

SUBSCRIPTIONSMAP :: const_iterator it = _subscriptions.find(serviceName);

それを返す== _ subscriptions.end()?真偽;

}

 

SubscriptionInfoMapIterator :: SubscriptionInfoMapIterator(const SubscriptionInfoMap&infoMap)

:_infoMap(infoMap)

{{

_mapIt = _infoMap._subscriptions.end();

}

 

SubscriptionInfoMapIterator :: 〜SubscriptionInfoMapIterator()

{{

 

}

 

void SubscriptionInfoMapIterator :: start()

{{

if(!_ infoMap._subscriptions.empty())

_mapIt = _infoMap._subscriptions.begin();

}

 

void SubscriptionInfoMapIterator :: forth()

{{

_mapIt ++;

}

 

ブール

SubscriptionInfoMapIterator :: off()

const

{{

return(_mapIt == _infoMap._subscriptions.end())?true:false;

}

 

const

std :: string&SubscriptionInfoMapIterator :: getServiceName()

const

{{

return(* _mapIt).first;

}

 

const

std :: set <std :: string>&SubscriptionInfoMapIterator :: getItemSet()

const

{{

*((* _ mapIt).second);を返します。

}

 

 

 

 

 

 

おすすめ

転載: blog.csdn.net/geggegeda/article/details/5306097