我是Objective-C的新手,所以请不要过多地评价我.我想知道:我可以在Objective-C中使用相当于C++ STL对的容器吗?
我想构建一个包含与NSBool关联的NSInteger的数组.我知道我可以使用一个数组,每个条目都是一个具有单个键值的NSDictionary,但我发现它有点矫枉过正.
有任何想法吗?
谢谢.
为什么没有std::pair迭代器?
std::pair应提供iterator和const_iterator以及begin()和end()-只为他们的两个成员.
我认为它会很有用,因为我们可以将它们传递给期望迭代的模板化函数,比如vector或set.
这有什么缺点吗?
我遇到的一个常见设计问题是,我将两个变量捆绑在一起,然后失去了以有意义的方式引用它们的能力.
std::pair<int,int> cords;
cord.first = 0; //is .first the x or y coordinate?
cord.second = 0; //is .second the x or y coordinate?
Run Code Online (Sandbox Code Playgroud)
我考虑过编写基本结构,但后来失去了许多带来的好处std::pair:
有一种方法来重命名或用于提供一个替代标识符first和second数据成员?
我希望利用所有接受的功能std::pair,
但仍然可以通过以下方式使用它们:
std::pair<int,int> cords;
//special magic to get an alternative name of access for each data member.
//.first and .second each have an alternative name.
cords.x = 1;
assert(cords.x == cords.first);
Run Code Online (Sandbox Code Playgroud) 我有以下向量:
std::vector< std::pair<int, int> > vectorOfPairs
Run Code Online (Sandbox Code Playgroud)
包括以下项目:
0, 1
0, 2
1, 4
2, 3
3, 4
4, 5
5, 6
Run Code Online (Sandbox Code Playgroud)
我想以一种方式对它们进行排序,即每对中的第二个分量等于向量中最近对的第一个分量,如下所示:
0, 1
1, 4
4, 5
5, 6
0, 2
2, 3
3, 4
Run Code Online (Sandbox Code Playgroud)
我不知道这是否足够明显,我会附上一张图片,显示我正在尝试做的事情:
我觉得我应该使用sort某种比较器,但我迷失在这里:
std::sort(vectorOfPairs.begin(), vectorOfPairs.end(), MyComparator);
Run Code Online (Sandbox Code Playgroud)
bool MyComparator(pair<int, int> a, pair<int, int> b) {
if(some_kind_of_comparison){
return true;
}
return false;
}
Run Code Online (Sandbox Code Playgroud)
我是c ++的新手,如果有人可以帮我解决如何做到这一点的伪代码,我将非常感激.
我如何vector通过比较pair.first哪一个来对此进行排序std::string?(不提供静态比较功能,也不使用boost).
以下代码编译并运行:
#include <initializer_list>
#include <iostream>
#include <vector>
#include <tuple>
void ext( std::initializer_list<std::pair<double, std::vector<double> >> myList )
{
//Do something
}
///////////////////////////////////////////////////////////
int main(void) {
ext( { {1.0, {2.0, 3.0, 4.0} } } );
return 0;
}
Run Code Online (Sandbox Code Playgroud)
虽然这个没有:
#include <initializer_list>
#include <iostream>
#include <vector>
#include <tuple>
void ext( std::initializer_list<std::tuple<double, std::vector<double> >> myList )
{
//Do something
}
///////////////////////////////////////////////////////////
int main(void) {
ext( { {1.0, {2.0, 3.0, 4.0} } } );
return 0;
}
Run Code Online (Sandbox Code Playgroud)
唯一的区别是,在第一种情况下,ext()函数接受类型initializer_list<pair>(工作)的参数而另一个使用initializer_list<tuple>(不起作用).但是,cplusplus.com表示 …
让我们说我有一个:
#include <utility>
using namespace std;
typedef pair<int, int> my_pair;
Run Code Online (Sandbox Code Playgroud)
如何初始化const my_pair?
问题1:
我正在使用C++ 11,我正在学习.我意识到我可以用两对来做到这一点:
pair<pair<<#class _T1#>, <#class _T2#>>, <#class _T3#>>
Run Code Online (Sandbox Code Playgroud)
这是最好的方式吗?
问题2:
如果我不需要不同的类型,两个项目的类型相同,使用对是浪费,那么我应该使用什么?三件物品?(同样的类型)
我的印象是,定义自己的结构总是更好,这样我就可以使用有意义的字段名而不是first和second.
标准使用的一个地方std::pair是访问元素std::map.first是关键和second价值.拥有一个特定的key_value_pair模板并不是更好,并将其字段称为key而value不是first和second?在我看来,这将使代码更加可读,免费.
我已经看到是否有一个单行代码可以将元组/对解包到引用中?并知道如何将元组/对中的值解压到单行中,如下所示
auto [validity, table] = isFieldPresentAndSet(r, "is_federated");
Run Code Online (Sandbox Code Playgroud)
这里isFieldPresentAndSet返回一个元组。
现在我想在多次连续调用中重用这两个变量,isFieldPresentAndSet如下所示
auto [validity, table] = isFieldPresentAndSet(r, "is_federated");
auto [validity, table] = isFieldPresentAndSet(r, "gslb_sp_enabled");
Run Code Online (Sandbox Code Playgroud)
validity然后检查和的值table。但这给了我编译错误,因为我第二次重新定义了validityand变量。table如果将第二行更改为
[validity, table] = isFieldPresentAndSet(r, "gslb_sp_enabled");
Run Code Online (Sandbox Code Playgroud)
或者
validity, table = isFieldPresentAndSet(r, "gslb_sp_enabled");
Run Code Online (Sandbox Code Playgroud)
它仍然给我编译错误。
有什么办法可以做到这一点吗?