标签: map

在std :: map中更改元素键的最快方法是什么

我理解为什么不能这样做的原因(重新平衡和东西):

iterator i = m.find(33);

if (i != m.end())
  i->first = 22;
Run Code Online (Sandbox Code Playgroud)

但到目前为止,改变密钥的唯一方法(我知道)是从树中删除节点,然后使用不同的密钥插入值:

iterator i = m.find(33);

if (i != m.end())
{
  value = i->second;
  m.erase(i);
  m[22] = value;
}
Run Code Online (Sandbox Code Playgroud)

由于更多原因,这似乎对我来说效率很低:

  1. 遍历树三次(+余额)而不是两次(+余额)
  2. 还有一个不必要的价值副本
  3. 不必要的重新分配,然后重新分配树内的节点

我发现分配和释放是这三者中最差的.我错过了什么或有更有效的方法吗?

更新:我认为,从理论上讲,它应该是可能的,所以我不认为改变不同的数据结构是合理的.这是我想到的伪算法:

  1. 找到树中我想要更改其键的节点.
  2. 如果从树上分离(不要解除分配)
  3. 重新平衡
  4. 更改分离节点内的密钥
  5. 将节点插回树中
  6. 重新平衡

c++ performance binary-tree std map

51
推荐指数
5
解决办法
4万
查看次数

C#到Java - 字典?

在Java中是否可以使用已经在其中声明的项来创建一个Dictionary?就像下面的C#代码一样:

   Dictionary<string, int> d = new Dictionary<string, int>()
    {
        {"cat", 2},
        {"dog", 1},
        {"llama", 0},
        {"iguana", -1}
    };
Run Code Online (Sandbox Code Playgroud)

我该怎么做以及我使用什么类型的?我读过字典已经过时了.

c# java dictionary map new-operator

51
推荐指数
3
解决办法
4万
查看次数

将Map <String,Object>转换为Map <String,String>

我怎样才能转换 Map<String,Object>Map<String,String>

这不起作用:

Map<String,Object> map = new HashMap<String,Object>(); //Object is containing String
Map<String,String> newMap =new HashMap<String,String>(map);
Run Code Online (Sandbox Code Playgroud)

java syntax map type-conversion

51
推荐指数
4
解决办法
8万
查看次数

scala:如何将扩展列表作为varargs传递给方法?

Map在scala中创建时,我打电话给我Map(entities.map{e => e.id -> e}),然后我得到:

found   : scala.collection.mutable.IndexedSeq[(Int, Entity)]
required: (Int, Entity)
Run Code Online (Sandbox Code Playgroud)

这是因为签名Map.apply是:def apply[A, B](elems: (A, B)*): CC[A, B],这需要一个varargs样式参数.

有没有办法转换,IndexedSeq以便可以通过Map.apply

scala map variadic-functions

50
推荐指数
2
解决办法
2万
查看次数

使用++运算符增加map <string,int>

我有一个地图来计算文件中单词的出现次数.我正在读文件中的文字,每次我读一个单词时我都想这样做:

map[word]++; //(where map is the name of my map, I'm not using map as a name of course)
Run Code Online (Sandbox Code Playgroud)

因此,如果我的地图已经将'word'作为一个键,它会增加它,否则它会创建新的键并递增它.

这就是我所关心的问题:如果我在一个新键上映射[word] ++(在第一个单词读取中是不可避免的),我的程序会崩溃,因为我的地图中的int是单元化的吗?如果是这样,告诉我的地图的最有效方法是什么:如果单词已经存在,那么在值上执行++,否则,创建值为1的新键?在这里使用带有'map.find'的if语句似乎不必要多余,您怎么看?

谢谢

c++ map operators

49
推荐指数
1
解决办法
2万
查看次数

JavaScript Array #map:index参数

我的问题是关于mapJavaScript中的数组方法.

你可以传递一个函数,它接受第二个参数,正在处理的数组的当前元素的索引,但是...到什么目的?当你这样做时会发生什么,而当你不这样做时会有什么不同?

您将使用此功能?

javascript methods map

49
推荐指数
3
解决办法
4万
查看次数

YAML:空值的字典

如何在YAML中写一个字典(map),其中一个键的空字符串为其值?

dictionary yaml map

48
推荐指数
1
解决办法
2万
查看次数

具有相等簇大小的K均值算法变化

我正在寻找最快的算法,通过距离将地图上的点分组为相同大小的组.在K-均值聚类算法看起来简单的和有希望的,但不会产生同样大小的组.

是否存在此算法的变体或不同的算法,允许所有群集的成员数相等?

另请参见:对具有相同大小的k个簇中的n个点进行分组

algorithm cluster-analysis map k-means

46
推荐指数
6
解决办法
3万
查看次数

去功能图

我有一个定义了函数的Go程序.我还有一张应该有每个功能键的地图.我怎样才能做到这一点?

我试过这个,但这不起作用.

func a(param string) {

}

m := map[string] func {
    'a_func': a,
}

for key, value := range m {
   if key == 'a_func' {
    value(param) 
   }
}

map func key-value go

46
推荐指数
4
解决办法
3万
查看次数

从C++映射中删除键

我想从STL地图中删除一个密钥.但是, map.erase()什么都不做.我该怎么做呢

c++ map

45
推荐指数
2
解决办法
8万
查看次数