我目前有一个std::map<std::string,int>存储整数值到唯一字符串标识符,我确实查找字符串.它主要是我想要的,除了它不跟踪插入顺序.因此,当我迭代地图以打印出值时,它们将根据字符串进行排序; 但是我希望它们按照(第一次)插入的顺序排序.
我想过使用一个vector<pair<string,int>>替代,但我需要查找字符串并将整数值增加大约10,000,000次,所以我不知道是否std::vector会明显变慢.
有没有办法使用std::map或是否有std更适合我需要的容器?
[我在GCC 3.4上,我的价值可能不超过50对std::map].
谢谢.
这让我发疯了:我只是想让Emacs最大化到启动时的屏幕分辨率.理想情况下,我喜欢适用于任何屏幕分辨率的跨平台(Windows和Linux)解决方案,但我甚至无法使用甚至硬编码大小的Window XP.
这是我尝试过的:
(w32-send-sys-command 61488)尝试了我在某处发现的这个功能:
(defun toggle-fullscreen ()
"toggles whether the currently selected frame consumes the entire display
or is decorated with a window border"
(interactive)
(let ((f (selected-frame)))
(modify-frame-parameters
f
`((fullscreen . ,(if (eq nil (frame-parameter f 'fullscreen))
'fullboth
nil))))))
Run Code Online (Sandbox Code Playgroud)不幸的是,以上都没有!对于上面的一些,我可以看到我的emacs窗口在一瞬间正确调整大小,然后恢复到较小的默认大小.如果我在初始化后运行上面的方法,emacs窗口会正确调整大小.世界上到底发生了什么?
[ps还有其他SO问题,但没有一个答案有效]
更新:
答案让我觉得我的init文件中的其他东西导致了问题.确实是这样!经过一些尝试和错误,我找到了罪魁祸首.如果我注释掉以下行,一切都很完美:
(tool-bar-mode -1)
Run Code Online (Sandbox Code Playgroud)
工具栏与最大化窗口有什么关系?
所以现在的问题是:如何禁用工具栏(毕竟,emacs的工具栏很丑陋,占用了宝贵的屏幕空间)并且在我的init文件中最大化了窗口?可能是工具栏干扰窗口大小的错误?
澄清:(工具栏模式-1)关闭工具栏,但此行干扰最大化Emacs窗口.因此,如果我尝试将函数放到最大化窗口并关闭工具栏,则最大化部分将失败; 如果工具栏部分已注释掉,则最大化部分将正常工作.它甚至不重要我使用什么解决方案(在我列出的4个中).
解决方案:(或者至少现在对我有用)
这可能是Emacs中的一个错误.解决方法是通过注册表禁用工具栏,而不是.emacs.将以下内容另存为.reg文件,并在Windows资源管理器中执行该文件:
Windows Registry Editor Version 5.00
[HKEY_CURRENT_USER\Software\GNU\Emacs]
"Emacs.Toolbar"="-1"
Run Code Online (Sandbox Code Playgroud)
(此解决方案是OtherMichael建议的工作版本).
如果我标记了多个文件,如何在emacs中查找/访问所有这些标记文件,除了dired-find-file在每个文件上运行?
是否有内置命令,还是需要一些额外的lisp代码?
我想要完成的简短版本:我有一个脚踏板(INFINITY-IN-USB-1,如果有任何兴趣),它是作为通用HID设备实现的,我希望它表现为控制和alt Linux上的密钥.我正在寻找X级别的东西,即不仅仅是单个程序.
更长的版本:我通过调用dll RegisterRawInputDevices和GetRawInputData并在隐藏的窗口中监听输入,在Windows XP中使用此设置.所有这些都是通过相当简单的Autohotkey脚本完成的(如果有人有兴趣可以在这里发布).关键是,不需要任何额外的驱动程序等; 只需要本机Windows dll.
我希望这个设置在linux上工作(更具体地说是Ubuntu下的Gnome,但我偶尔会使用其他发行版/窗口管理器,所以我很感激X级别的解决方案).这个脚踏板不会将自己注册为键盘甚至操纵杆,而是作为具有UsagePage 12,用法3的HID设备.我注意到最新的Ubuntu可以检测并使用Microsoft Natural Keyboard上的收藏夹键,它也可以注册为HID设备*.我使用与使用脚踏板相同的方法在Windows上使用这些键(即没有捆绑软件).所以我认为这个踏板的东西也适用于linux,但问题是如何?
[我是Linux上较低级别的新手,所以请慷慨地提供引言或教程的链接.)
*对于那些不知情的人,Microsoft Natural Keyboard会同时注册为常规键盘和通用HID设备.如果没有某些应用程序(例如捆绑的应用程序)知道如何解释HID输入,常规键将起作用,但是最喜欢的键和特殊功能键是无用的.
为了澄清,linux并没有将踏板压力视为输入.它确实识别USB设备,但xev没有为踏板按下输出.我已经看到有人在WINE下成功使用踏板进行转录软件的报道,但这必须以Windows的方式工作,并没有给出我想要的东西(这使得踏板看起来像所有原生linux应用程序的键盘).我想知道是否需要一些低级linux键盘驱动程序?
这里有更多信息:如果我在终端发出这个
cat /dev/usb/hiddev0
Run Code Online (Sandbox Code Playgroud)
(dev/usb/hiddev0是我的踏板),我得到与我的踏板按下相对应的原始代码.那是一个开始.我知道那些原始代码意味着什么:二进制,0001,0010,0100分别对应每个踏板,踏板按压的组合发送那些二进制数的组合,以及释放任何踏板仍然被按下的踏板触发输入(如果全部踏板向上,0000发送).
如何让X听取dev/usb/hiddev0并将原始代码翻译成可能是一个特殊的键码,以便我可以用xmodmap或其他东西映射它们?
场景:我正在尝试在git下获取我的unix点文件.我必须在(至少)cygwin环境和一些标准的Linux发行版(ubuntu和opensuse)之间工作,并且我有特定于cygwin的文件/代码行.由于我不想检查无用的文件或者不得不处理我的dotfiles中的大量案例,我正在为我的每个环境创建分支.但是我做的大部分编辑对所有环境都是通用的,所以几乎每次我提交时我都需要将该更改传播到我的所有分支.
所以基本上我有几个几乎相同的分支,除了一些提交,并且我需要在所有分支中进行大多数提交.
问题:如果有的话,推荐的git工作流程是什么?或者,对于我的场景,是否有更好的设置(不使用多个分支?)?
[我尝试过采摘樱桃,但这涉及到相当多的工作,更不用说这里的所有重复提交以及保持我的分支同步的噩梦.]
我需要用一个更大的字符串替换一个动态子字符串,但只需要一次(即第一次匹配).String类仅提供replace(),它替换子字符串的所有实例; 有一个replaceFirst()方法,但它只需要regexp而不是常规字符串.我对使用正则表达式有两个顾虑:
1)我的子串是动态的,所以可能包含奇怪的字符,这些字符在正则表达式中表示其他东西,我不想处理字符转义.
2)这种替换经常发生,我不确定使用正则表达式是否会影响性能.由于正则表达式本身是动态的,我无法预先编译正则表达式!
我必须在这里遗漏一些东西,因为在我看来这是一个非常基本的东西......是否有一个replaceFirst方法在java franework中的其他地方使用常规字符串?
我花了一段时间才弄清楚为什么一些cout输出似乎消失在以太中.罪魁祸首:
std::cout<< "This line shows up just fine" << std::endl;
const char* some_string = a_function_that_returns_null();
if (some_string == 0)
std::cout<< "Let's check the value of some_string: " << some_string << std::endl;
std::cout<< "This line and any cout output afterwards will not show up" << std::endl;
Run Code Online (Sandbox Code Playgroud)
上面代码段的输出将是:
This line shows up just fine
Let's check the value of some_string:
Run Code Online (Sandbox Code Playgroud)
因此将NULL输入cout将禁用所有输出.为什么?以及如何解决它?
这不会一直发生 - 具有相同代码的同事获得所有预期的输出.如果你想知道为什么我不能阻止使用if语句将NULL输入cout:我在大型代码库中工作,并且不知道这会发生在哪里!我所知道的是我从未出现过的cout陈述.
更多信息:
a_function_that_returns_null()实际上是getenv("HOST").我检查了命令行echo $HOST,因为HOST变量是空的.如果我这样做export HOST=(bash风味),输出就在那里.我不知道HOST变量最初包含什么,也不知道getenv在修改HOST变量之前最初返回的内容; 我所知道的(some_string == 0)都是真的.
我使用shell-command一个批次(默认绑定到M-!),但我经常对我正在编辑的缓冲区做一些事情.而不是键入缓冲区名称(并且shell命令中没有文件名完成功能,唉!),每当我按下键时,有一个快捷键(比如f3)为我插入该名称是很好的.
问题是我不想全局绑定密钥(我在其他上下文中使用f3进行其他操作),只有在shell-command提示时才在迷你缓冲区中使用.编写一个lisp函数来插入当前缓冲区名称很容易,但是我应该修改哪个模式的键映射来将键绑定到该函数?
或者,是否有任何lisp代码/包在shell-command中提供文件名完成,类似于bash的做法?我知道正常的Mx shell完成了,但是在迷你缓冲区中输入命令的便利性很难放弃;)
编辑:
这就是我想要的,取自怀远的回答,其中一些修正来自http://osdir.com/ml/emacs.sources/2002-04/msg00022.html
(define-key minibuffer-local-map
[f3] (lambda () (interactive)
(insert (buffer-name (current-buffer-not-mini)))))
(defun current-buffer-not-mini ()
"Return current-buffer if current buffer is not the *mini-buffer*
else return buffer before minibuf is activated."
(if (not (window-minibuffer-p)) (current-buffer)
(if (eq (get-lru-window) (next-window))
(window-buffer (previous-window)) (window-buffer (next-window)))))
Run Code Online (Sandbox Code Playgroud) 我的Windows配置如下所示:
+----------+-----------+
| | |
| | |
| | |
| | |
| | |
| +-----------+
| | |
+----------+-----------+
Run Code Online (Sandbox Code Playgroud)
我使用右下方的窗口进行特殊显示(如帮助,完成等),但是当我调用使用的命令(find-file-other-window等等)时,emacs仍坚持使用该窗口display-buffer,并调整该窗口的大小.这很烦人......有没有办法可以强制emacs不要使用那个窗口?我在考虑建议display-buffer,但这是c中的一个功能.有什么想法吗?
编辑:
基于Trey的答案,这对我来说是有用的:
(setq special-display-function 'my-display-buffer)
(setq special-display-regexps '(".*"))
(defun display-special-buffer (buf)
"put the special buffers in the right spot (bottom rigt)"
(let ((target-window (window-at (- (frame-width) 4) (- (frame-height) 4)))
(pop-up-windows t))
(set-window-buffer target-window buf)
target-window))
(defun my-display-buffer (buf)
"put all buffers in a window other than the one in …Run Code Online (Sandbox Code Playgroud) 我在我的用户控件的构造函数中有一个方法调用,它做了一些在设计时无法工作的东西(连接到数据库),当我尝试将该控件添加到GUI设计器时,Visual Studio就被挽救了.
当然,我可以将代码分解为一个单独的方法,但我不喜欢每次使用该对象时我都需要记住执行某个对象函数必不可少的方法的想法(这就是构造函数的作用)对于!).
是否有类似预处理器符号的东西,我可以标记我的代码,以便Visual Studio不会尝试在设计时执行该代码?