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=省名
简单快捷。。