C++ C++;模板类映射
我将构造函数和两个函数添加到上一个链接问题的类中,在这一点上我需要帮助:C++ C++;模板类映射,c++,templates,map,iterator,C++,Templates,Map,Iterator,我将构造函数和两个函数添加到上一个链接问题的类中,在这一点上我需要帮助: 你认为这个构造器是做什么的 在地图的开头添加一个值 在main中初始化后,我在相应的键中只看到一个地址作为值。怎么了 运算符[]应该获取特定键的值。但是,我不能使用它来获取输出中的映射元素。有什么提示吗 template<class K, class V> class template_map{ public: template_map( V const& val) { m_
- 你认为这个构造器是做什么的
- 在地图的开头添加一个值
- 在main中初始化后,我在相应的键中只看到一个地址作为值。怎么了李>
template<class K, class V>
class template_map{
public:
template_map( V const& val) {
m_map.insert(my_map.begin(),std::make_pair(std::numeric_limits<K>::min(),val));
};
typedef typename std::map<K,V> TMap;
TMap my_map;
typedef typename TMap::const_iterator const_iterator;
const_iterator begin() const { return my_map.begin(); }
const_iterator end() const { return my_map.end(); }
V const& operator[]( K const& key ) const {
return ( --my_map.upper_bound(key) )->second;
}
...
};
int main()
{
interval_map<int,int> Map1 (10);
//Show the elements of the map?
}
模板
类模板映射{
公众:
模板映射(V常量和val){
m_map.insert(my_map.begin(),std::make_pair(std::numeric_limits::min(),val));
};
typedef typename std::map TMap;
TMap my_map;
typedef typename TMap::const_迭代器const_迭代器;
常量迭代器begin()常量{返回我的映射。begin();}
const_迭代器end()const{return my_map.end();}
V常量和运算符[](K常量和键)常量{
return(-my_map.upper_bound(key))->second;
}
...
};
int main()
{
区间图Map1(10);
//显示地图的元素?
}
还要考虑它应该是一个向映射中插入值的函数
你认为这个构造器是做什么的?同时添加一个值
地图的开始?我看在各自的钥匙里只有一个地址
作为在main中初始化后的值。怎么了
它将此值添加到地图中。迭代器参数只是一个提示:如果要在该位置之后插入新项,则可以更快地完成操作。否则,映射将需要像往常一样找到正确的位置来插入新值
运算符[]应该获取特定键的值。
但是,我不能使用它来获取地图中的元素
输出。有什么提示吗
上限
将迭代器返回到第一个键值对,其中键大于参数--上限
因此会向项返回迭代器,该项的键等于或小于查询的键。如果上限
返回map.begin()
,因为所有键都大于查询,所以递减它是未定义的行为
这里需要的是find
成员函数。您还需要处理找不到密钥的情况(map.end()
返回),例如抛出异常
或者,您可以根据map::operator[]
实现操作符[]
。这意味着函数不能是常量,因为如果找不到键,map会插入一个新的默认值
你认为这个构造器是做什么的?同时添加一个值
地图的开始?我看在各自的钥匙里只有一个地址
作为在main中初始化后的值。怎么了
它将此值添加到地图中。迭代器参数只是一个提示:如果要在该位置之后插入新项,则可以更快地完成操作。否则,映射将需要像往常一样找到正确的位置来插入新值
运算符[]应该获取特定键的值。
但是,我不能使用它来获取地图中的元素
输出。有什么提示吗
上限
将迭代器返回到第一个键值对,其中键大于参数--上限
因此会向项返回迭代器,该项的键等于或小于查询的键。如果上限
返回map.begin()
,因为所有键都大于查询,所以递减它是未定义的行为
这里需要的是find
成员函数。您还需要处理找不到密钥的情况(map.end()
返回),例如抛出异常
或者,您可以根据
map::operator[]
实现操作符[]
。这意味着函数不能是常量,因为如果找不到键,map将插入一个新的默认值。map::insert()中的迭代器只是一个提示;从本质上讲,它对程序的语义没有任何意义
代码插入通过构造函数参数传递的值以及键numeric\u limits::min()
,即给定键类型的最小可能值。仅当数值\u限制
专门用于K
类型时,此选项才会生效
还要注意,如果键已经存在,则相应的映射值不会被覆盖,因此相应的插入函数的使用将非常有限。map::insert()中的迭代器只是一个提示;从本质上讲,它对程序的语义没有任何意义 代码插入通过构造函数参数传递的值以及键
numeric\u limits::min()
,即给定键类型的最小可能值。仅当数值\u限制
专门用于K
类型时,此选项才会生效
还要注意,如果键已经存在,则相应的映射值不会被覆盖,因此相应的插入函数的使用将非常有限
你认为这个构造器是做什么的?在地图的开头添加一个值
它初始化映射,使任何x
的map[x]==v
。映射将间隔与值关联,在内部存储由每个间隔的开始键入的正常映射;它被初始化,以便键类型的整个范围映射到初始值
在main中初始化后,我在相应的键中只看到一个地址作为值。怎么了?运算符[]应该获取特定键的值。但是,我不能使用它来获取输出中的映射元素。有什么提示吗
我不知道你在问什么。
Map1.my_map.insert(std::make_pair(interval_start, value));
V & operator[](K const & key) {
V const & old_value = (--my_map.upper_bound(key))->second;
return *my_map.insert(std::make_pair(key, old_value)).first;
}
for (auto it = Map1.begin(); it != Map1.end(); ++it) {
std::cout << it->first << " maps to " << it->second << '\n';
}