我遇到了以下问题:
从地图上擦除键并再次调用该键后,它始终返回0。
那如果某个键的值设置为0怎么办?
#include <iostream>
#include <map>
int main(int argc, char const *argv[]) {
std::map<std::string, int> mymap;
mymap["a"] = 10;
mymap["c"] = 10;
mymap["b"] = 20;
mymap["zero"] = 0;
if (mymap["zero"])
std::cout << "yes" << '\n';
else
std::cout << "no" << '\n
mymap.erase("zero");
if (mymap["zero"])
std::cout << "yes" << '\n';
else
std::cout << "no" << '\n';
std::cout << mymap["zero"] << '\n';
return 0;
}
答案 0 :(得分:3)
使用.count()
代替使用 import org.apache.http.entity.mime.MultipartEntity;
import org.apache.http.entity.mime.content.FileBody;
....
....
MultipartEntity multipartEntity = new MultipartEntity();
FileBody fb = new FileBody(file, "application/octet-stream");
multipartEntity.addPart(fb);
HttpClient httpClient = new DefaultHttpClient() ;
HttpPost httpPostRequest = new HttpPost (url) ;
//url above should be url of the Rest service endpoint
httpPostRequest.setEntity(multiPartEntity) ;
HttpResponse response = httpClient.execute(httpPostRequest) ;
来检查密钥是否存在:
if(mymap["key"])
您的问题是operator[]
将创建一个新的键/值对(如果不存在)。来自cppreference:
返回对映射到等效于键的键的值的引用,如果该键尚不存在,则执行插入。
因此,如果您尝试使用if(mymap.count("zero")) { //key exists!
...
来判断键mymap["zero"]
是否存在于地图中,那么它肯定会-您正在创建它!
答案 1 :(得分:3)
您需要的是count()
函数。 iTween.RotateTo(mainModel, iTween.Hash(
"z", this.gameObject.transform.eulerAngles.x + 90,
"time", 1f,
"easetype", "easeInOutSine",
"looptype", "pingpong"
));
将返回元素数,如果不存在则不会构造对象。那会使您的if语句看起来像
count()
由于可以使用C ++ 17,因此如果要对元素(如果找到)进行处理,则可以利用它的新if语句语法,该语法允许您在if语句中声明变量并具有
if (mymap.count("zero"))
// key exist here
答案 2 :(得分:3)
operator []
将插入一个具有默认值的新条目。您应该改用find
:
if (mymap.end() != mymap.find(std::string{"zero"}))
答案 3 :(得分:2)
有几种选择。最简单的方法是使用1 2
3 4
5 6
7 8
9 10
11 12...
而不是std::map::find
检查元素的存在,如果元素不存在,它将始终创建一个默认值。
另一个选项将operator[]
设置为地图数据类型,然后检查是否设置了可选选项。