我发现检查重复项的唯一方法是插入并检查std::pair.secondfor false,但问题是如果密钥未使用,这仍会插入一些东西,而我想要的是一个map.contains(key);函数.
现在std有一个真正的哈希映射unordered_map,为什么(或何时)我还想在它实际存在的系统上使用旧的mapover unordered_map?是否有任何我无法立即看到的明显情况?
从学术上讲,数据结构Tree和Graph之间的本质区别是什么?那么基于树的搜索和基于图的搜索呢?
我刚刚开始研究Java 8并试用lambdas我以为我会尝试重写一个我最近编写的非常简单的东西.我需要将String of Map转换为Column到另一个String to Column的Map,其中新Map中的Column是第一个Map中Column的防御副本.列具有复制构造函数.我到目前为止最接近的是:
Map<String, Column> newColumnMap= new HashMap<>();
originalColumnMap.entrySet().stream().forEach(x -> newColumnMap.put(x.getKey(), new Column(x.getValue())));
Run Code Online (Sandbox Code Playgroud)
但我相信必须有一个更好的方法去做,我会感激一些建议.
我希望JSTL循环通过a Map<String, String>并输出键的值和它的值.
例如,我有一个Map<String, String>可以有任意数量的条目,我想使用JSTL遍历这个地图并输出密钥和它的值.
我知道如何使用密钥访问该值${myMap['keystring']},但是如何访问密钥?
我有一张地图:
var sessions = map[string] chan int{}
Run Code Online (Sandbox Code Playgroud)
我该如何删除sessions[key]?我试过了:
sessions[key] = nil,false;
Run Code Online (Sandbox Code Playgroud)
那没用.
更新(2011年11月):
Go版本1中删除了删除地图条目的特殊语法:
Go 1将删除特殊的地图分配并引入新的内置函数
delete:delete(m, x)将删除由表达式检索的地图条目m[x]....
我有一个问题hash_map,并map在C++中.我明白这map是STL,但hash_map不是标准.这两者有什么区别?
我试图根据特定情况从地图中删除一系列元素.我如何使用STL算法?
最初我想使用remove_if但不可能因为remove_if不适用于关联容器.
是否有适用于地图的"remove_if"等效算法?
作为一个简单的选项,我想到循环遍历地图并擦除.但是循环遍历地图并删除安全选项?(因为迭代器在擦除后变为无效)
我使用以下示例:
bool predicate(const std::pair<int,std::string>& x)
{
return x.first > 2;
}
int main(void)
{
std::map<int, std::string> aMap;
aMap[2] = "two";
aMap[3] = "three";
aMap[4] = "four";
aMap[5] = "five";
aMap[6] = "six";
// does not work, an error
// std::remove_if(aMap.begin(), aMap.end(), predicate);
std::map<int, std::string>::iterator iter = aMap.begin();
std::map<int, std::string>::iterator endIter = aMap.end();
for(; iter != endIter; ++iter)
{
if(Some Condition)
{
// is it safe ?
aMap.erase(iter++);
}
}
return 0;
}
Run Code Online (Sandbox Code Playgroud) 我有一个Map<String,String>具有大量键值对.现在我想从中删除选定的键Map.以下代码显示了我为实现这一点所做的工作.
Set keySet = new HashSet(); //I added keys to keySet which I want to remove.
Run Code Online (Sandbox Code Playgroud)
然后 :
Iterator entriesIterator = keySet.iterator();
while (entriesIterator.hasNext()) {
map.remove( entriesIterator.next().toString());
}
Run Code Online (Sandbox Code Playgroud)
这很有效.我只是想知道,实现我的要求会有什么更好的方法?
据我了解,有几种方法(也许还有其他方法)Map在Java中创建一个浅表副本:
Map<String, Object> data = new HashMap<String, Object>();
Map<String, Object> shallowCopy;
// first way
shallowCopy = new HashMap<String, Object>(data);
// second way
shallowCopy = (Map<String, Object>) ((HashMap<String, Object>) data).clone();
Run Code Online (Sandbox Code Playgroud)
一种方式优于另一种方式,如果是这样,为什么?
值得一提的是,第二种方式是"Unchecked Cast"警告.所以你必须添加@SuppressWarnings("unchecked")以解决它,这有点刺激(见下文).
@SuppressWarnings("unchecked")
public Map<String, Object> getDataAsMap() {
// return a shallow copy of the data map
return (Map<String, Object>) ((HashMap<String, Object>) data).clone();
}
Run Code Online (Sandbox Code Playgroud)