首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

STL有关问题,请支招.

2013-01-06 
STL问题,请支招....//设计下面的结构,key:表示省名称 value:表示省包含的城市名称mapstring,vectorstrin

STL问题,请支招....


//设计下面的结构,key:表示省名称 value:表示省包含的城市名称
map<string,vector<string>>

通过省名称,可以很容易知道它包含哪些城市。问题是,我想通过城市名,快速找到它归属的省,请问如何设计结构。
[解决办法]

#include <map>
#include <string>
#include <vector>
#include <algorithm>

using namespace std;

template<class ProvinceType, class CityType>
class A
{
public:
typedef map<ProvinceType, vector<CityType>> MapType;
template<class K, class V>
class Finder
{
public:
Finder(const CityType& _v) : m_value(_v){}
bool operator()(const pair<K, V>& _Pair) const
{
V::const_iterator it = find(_Pair.second.begin(), _Pair.second.end(), m_value);
return(it != _Pair.second.end());
}
private:
CityType m_value;
};
        //  通过城市查找归属的省
bool FindProvinceByCity(const string& strCity, string* strProvince)
{
MapType::iterator it = find_if(m_map.begin(), m_map.end(),
Finder<ProvinceType, vector<CityType>>(strCity));

if(it == m_map.end())
{
return false;
}

*strProvince = it->first;
return true;
}

MapType m_map;
};

[解决办法]
如果要从结构上改善下的话,可以让城市作为key,让value为省,map<string,string>
则直接可用通过operator []取得省
[解决办法]
最简单的

key=城市名
value=省名

[解决办法]
中国有
4个直辖市 北京市 天津市 上海市 重庆市 
地级市282 
县级市374 

行政区:
23个省
5个自治区 广西壮族自治区 内蒙古自治区 西藏自治区 宁夏回族自治区 新疆维吾尔自治区 
2个特别行政区  香港特别行政区 澳门特别行政区 


这些东西能用多少空间,采用普通的方式就行
map<省,城市>      map<城市,省>
空间就多用了一点点,但简单
[解决办法]
就像楼上所说的:

key=城市名
value=省名

简单快捷。。

热点排行