每当我需要存储与特定类型的值(键值 - 例如字符串或其他对象)相关联的一些数据时,我通常使用C++ stdlib映射.stdlib映射实现基于树,它提供比标准数组或stdlib向量更好的性能(O(log n)).
我的问题是,你知道任何C++"标准"哈希表实现提供更好的性能(O(1))吗?类似于Java API中Hashtable类中可用的内容.
比方说,我有一个LazySeq的java.lang.Character中的像
(\b \ \! \/ \b \ \% \1 \9 \/ \. \i \% \$ \i \space \^@)
Run Code Online (Sandbox Code Playgroud)
如何将其转换为String?我已经尝试过显而易见的事了
(String. my-char-seq)
Run Code Online (Sandbox Code Playgroud)
但它会抛出
java.lang.IllegalArgumentException: No matching ctor found for class java.lang.String (NO_SOURCE_FILE:0)
[Thrown class clojure.lang.Compiler$CompilerException]
Run Code Online (Sandbox Code Playgroud)
我认为因为String构造函数需要原始char []而不是LazySeq.那么我尝试了类似的东西
(String. (into-array my-char-seq))
Run Code Online (Sandbox Code Playgroud)
但它抛出同样的异常.现在的问题是into-array返回java.lang.Character []而不是原始char [].这很令人沮丧,因为我实际上是这样生成我的角色序列
(map #(char (Integer. %)) seq-of-ascii-ints)
Run Code Online (Sandbox Code Playgroud)
基本上我有一个表示ASCII字符的seq的整数; 65 = A等.您可以看到我明确使用原始类型强制函数(char x).
这意味着我的map函数返回一个原始char,但Clojure map函数整体返回java.lang.Character对象.
说明| 一种Java程序,用于读取文本文件并按字母顺序打印每个唯一单词以及单词在文本中出现的次数.
程序应该声明一个类型的变量Map<String, Integer>来存储单词和相应的出现频率.但是哪种具体类型呢?TreeMap<String, Number>还是HashMap<String, Number>?
输入应转换为小写.
一个单词不包含以下任何字符: \t\t\n]f.,!?:;\"()'
示例输出|
Word Frequency
a 1
and 5
appearances 1
as 1
.
.
.
Run Code Online (Sandbox Code Playgroud)
备注| 我知道,我已经在Perl中看到了大致两行代码的优雅解决方案.但是,我想在Java中看到它.
编辑:哦,是的,使用这些结构之一显示实现是有帮助的(在Java中).
我在Windows下使用GVIM.并希望将CAPSLOCK映射到Ctrl + ^
有什么办法吗?
顺便说一下,我在网上看到大量样本如何使用注册表黑客交换CAPS和Esc,但是没有一个使用VIM map命令,而是使用外部工具和注册表更改.
折叠上有什么好的教程?
原始问题,从删除中恢复以提供其他答案的上下文:
我正在尝试实现一种方法来查找矩形,圆形,位置和所有扩展形状的组的boudning框.组基本上是一组形状
abstract class Shape
case class Rectangle(width: Int, height: Int) extends Shape
case class Location(x: Int, y: Int, shape: Shape) extends Shape
case class Circle(radius: Int) extends Shape
case class Group(shape: Shape*) extends Shape
Run Code Online (Sandbox Code Playgroud)
我得到了除第一组之外的所有三个计算的边界框.所以现在对于边界框方法我知道我应该使用map并向左折叠为Group,但我无法找到创建它的确切语法.
object BoundingBox {
def boundingBox(s: Shape): Location = s match {
case Circle(c)=>
new Location(-c,-c,s)
case Rectangle(_, _) =>
new Location(0, 0, s)
case Location(x, y, shape) => {
val b = boundingBox(shape)
Location(x + b.x, y + b.y, b.shape)
}
case Group(shapes …Run Code Online (Sandbox Code Playgroud) 我创建了一个简单的双向映射类,它通过内部存储两个std::map具有相反键/值类型的实例,并提供用户友好的界面:
template<class T1, class T2> class Bimap
{
std::map<T1, T2> map1;
std::map<T2, T1> map2;
// ...
};
Run Code Online (Sandbox Code Playgroud)
是否有更有效的方法来实现不需要两倍内存的双向映射?
通常如何实施bimap?
编辑:
bimap元素应该是可变的还是不可变的?(更改一个元素map1应该更改键map2,但键是常量,这是不可能的 - 解决方案是什么?)
元素的所有权也是另一个问题:当用户在bimap中插入键值对时,bimap应该复制该键值对并存储它,然后内部第二个映射(具有反转的键/值)应该不复制,但指向原始对.怎么能实现这一目标?
编辑2:
我有一个Map<String, ArrayList>和一个Set<String>.有没有办法将地图的键与字符串集"相交",以便只保留具有给定键的对,而不迭代整个地图?我主要担心的是性能并重新发明了可以更优雅地完成工作的轮子.
我正在尝试删除LeafletJS地图上的缩放控件(+/-).
我正在使用Leaflet的MapBox.js版本,但大多数操作与Leaflet相同.我像这样实现我的地图:
var map = L.mapbox.map('map');
var layer = L.mapbox.tileLayer('MAPBOX-ID', {
format: 'jpg70',
minZoom: 13,
maxZoom: 15,
reuseTiles: true,
unloadInvisibleTiles: true
});
map.addLayer(layer);
map.setView([40.73547,-73.987856]);
Run Code Online (Sandbox Code Playgroud)
该文件说,有将从地图中删除变焦控制zoomControl可选项,但我已经得到它的工作没有运气.
如何通过此实现删除缩放控件?
谢谢!
我有一个类型的C++对象 ObjectArray
typedef map<int64_t, std::unique_ptr<Class1>> ObjectArray;
Run Code Online (Sandbox Code Playgroud)
创建一个unique_ptr新的类型对象Class1并将其插入到类型的对象中的语法是什么ObjectArray?
说我有一个Map<String, Integer>.有一种简单的方法可以从中得到Map<String, String>它吗?
通过简单,我的意思是不喜欢这样:
Map<String, String> mapped = new HashMap<>();
for(String key : originalMap.keySet()) {
mapped.put(key, originalMap.get(key).toString());
}
Run Code Online (Sandbox Code Playgroud)
而是一些像以下一样的班轮:
Map<String, String> mapped = originalMap.mapValues(v -> v.toString());
Run Code Online (Sandbox Code Playgroud)
但显然没有办法mapValues.